删除一个无头单链表的非尾节点(C语言)

来源:互联网 发布:淘宝卡包 编辑:程序博客网 时间:2024/06/05 22:15
void DelNotTailNode(PSListNode pos){    PSListNode pNode = NULL;    assert(pos);    if (NULL == pos->pNextNode)    {        return;    }    else    {        DataType temp = 0;        //交换pos和pos->pNextNode的数据(相当于交换了两个结点的位置),使问题转换为删除pos指向的结点的下一个结点        temp = pos->data;        pos->data = pos->pNextNode->data;        pos->pNextNode->data = temp;        pNode = pos->pNextNode;        pos->pNextNode = pos->pNextNode->pNextNode;        free(pNode);        pNode = NULL;    }}

首先要理解什么是无头结点的链表,什么是有头结点的链表,要是连这个都理解错了,就完了:
无头结点的链表:第一个节点既有数据域,又有指针域,是通过一个指向该链表的第一个节点的指针来标记该链表的。
这里写图片描述

有头结点的链表:第一个节点只有指针域,该指针域存放的是指向链表下一个节点的指针(或NULL),该链表通过头结点来标记。
这里写图片描述

无奈很多人把无头结点理解为了这样:
这里写图片描述
然后他就一直想,没有头,怎么能找到该链表啊,一直想,一直想。。。。。。最后还是放弃了,脑海里想着这题出错了吧。

PS:上面两张图片放的是最简单的无头结点的链表和有头结点的链表的形式。

0 0