基于上一次写的链表,现在,我们来讨论下面这些问题。
1.链表的冒泡排序
2.删除无头非尾节点
3.反转链表
4.在当前节点前插入一个数据x
5.查找链表的中间节点。
6.删除单链表的倒数第K个节点(K>1&&K<总长度)
对于上面这6个问题,我们进行分析与解答。
链表的代码我都已经写过博客:数据结构—单链表的实现
另外,我也在我的github上有链表的代码,github链接
如还有什么问题,可以发邮件到 953659912@qq.com
1.链表的冒泡排序
关于链表的排序问题是我们需要关心的,链表的排序,排序时比较方便的就是交换链表所保存的内容,所以接下来我们来提供一种思路来解决这个问题。
在这里我们的思路是先有两个指针,一个头指针,一个尾指针,第一次从头进行冒泡到尾,第二次从头冒泡到最后一个节点的前一个节点,就这样一次进行下去,一直到冒泡到第一个节点和第二个节点。
讲到这,我想大家应该明白了怎么实现了吧。
下面附上代码实现过程。
void BubbleSort(pLinkList pList)
{
pLinkNode cur = NULL;
pLinkNode tail = NULL;
assert(pList);
cur = pList->pHead;
if ((pList->pHead == NULL)||(pList->pHead->next==NULL))
{
return;
}
while (cur != tail) //当尾指针不等于头指针时进行冒泡
{
while (cur->next != tail) //控制cur指针最后到的位置是倒数第二个节点
{
if (cur->data > cur->next