无头单链表节点的删除以及新节点之前的插入

来源:互联网 发布:dnf台服辅助源码 编辑:程序博客网 时间:2024/05/14 16:57

    想要理解这两种操作,我们首先需要了解的是什么事无头单链表,无头单链表就是指的没有头指针的一个单独节点。就好比我们永指针遍历链表一样,某一时刻指针指向的一个非尾节点就是一个无头单链表。这样一个链表的最大特点就是该节点我们只知道它的数值以及一个指向下一个节点的指针。

    现在来考虑我们需要做的操作,一个添加一个删除,首先是删除。我们知道,在一个链表中,我们如果想要删除某一个节点,我们首先需要知道该节点的上一个节点以及该节点的下一个节点,删除时我们只需要将上一个节点的节点指针直接指向该节点的下一个节点即可。简单来讲就是将该节点的指针直接赋给上一个节点的指针即可。而我们如果要操作一个无头指针,我们无法搜寻到该节点的上一个节点。这时我们可以先将下一个节点的值赋给该节点,等于说让两个节点保存的值相同,然后删除下一个节点即可。这样我们无需该节点的上一个节点即可办到。这样我们就成功将当前节点删除了。在C中代码如下

voidDeletNotTailNode(Pnode *phead)//删除无头链表的指定节点  参数需要传入当前节点{assert((*phead));(*phead)->date=(*phead)->next->date;//将下一节点的值复制到当前节点删除下一节点 即是删除当前节点(*phead)->next=(*phead)->next->next;}
    同理,添加也是相同的道理,添加我们需要新创建一个节点然后将新的节点接在当前节点的下一个节点,此时我们只需要互换两个节点保存的值即可。代码如下
void InsertNotTailNode(Pnode *phead,Datetype date)//在无头单链表非头节点前插入新节点{Pnode _new;Datetype i=0;_new->date=date;_new->next=(*phead)->next;(*phead)->next=_new;//将新节点插入到当前节点的下一个节点i=(*phead)->date;(*phead)->date=_new->date;_new->date=i;//交换两个节点数据上的值}

以上只是本人自己的总结,如有问题,望各路大佬多多指导 多谢!

0 0