本文实例讲述了C++删除链表中间节点的方法。分享给大家供大家参考,具体如下:
题目:
给定链表头结点head,实现删除链表的中间节点函数。
解题思路及代码:
快慢指针,快指针走两步,慢指针一步。
当快指针走到终点时,慢指针正好是链表中间节点,删除此节点即可。
链表结构定义:
typedef struct Node { int data; struct Node* next; }node, *pLinkedList;
算法C++代码:
Node* removeMidNode(pLinkedList head) { if (head->next == NULL || head == NULL) return head; if (head->next->next == NULL) return head->next; pLinkedList fast = head; pLinkedList slow = head; pLinkedList pre = NULL; /* head 1 2 3 4 5 pre slow fast */ //1个节点 if (head->next->next == NULL) return head->next; while (fast->next != NULL && fast->next->next != NULL) { pre = slow; fast = fast->next->next; slow = slow->next; } //此时fast已到终点,slow为中间节点,pre为中间节点前一个节点 pre->next = slow->next; free(slow); slow = NULL; return head; }
希望本文所述对大家C++程序设计有所帮助。
这是我的remove函数,用于删除具有元素的节点。我得到了一个seg错误,我很确定这是因为temp->prev是前面的哨兵,所以从技术上来说,它不在双链表中。如果这是正确的,我实际上如何防止这种情况?如有任何帮助,不胜感激。 编辑:刚刚更新了代码,但仍然出现了Seg错误
我试图从基于阉羊的双链表中删除一个元素,该列表中的节点满足返回bool的函数。由于某种原因,替换节点的前一个指针(下一个被删除)不更新,而是引用回它自己。 我的代码 测试结果
我的问题是,如果用户输入一个姓氏,并且在链接列表中有多个相同的姓氏,并且其中一个姓氏在head节点中。如何在不删除头部节点的情况下删除另一个姓氏。我尝试了一些我能想到的方法,但是删除了所需的节点(这很好),包括头部节点(这不是我想要的…)
双链表节点是在main函数中创建的。Ender和header已定义。在删除节点函数处中断-ender为空。 释放最后一个和第一个输入的内存的最佳方法是什么,即:删除:233,A和888,F?
我有一个单链表。如果我想从这个链表中删除一个已知的元素,我能做什么? 例如:节点*头;(44)节点*尾部;(39) 链接列表:44 27 59 13 45 39我们想从中删除45。得到:4427591339 我只知道从列表中删除第一个元素(如果元素(需要删除)是列表的第一个元素)。我得到了:头=头- 如何从列表中删除中间节点?
我有一个基本的链表问题,我在下面试图解决。如果您能为我的方法、算法的正确性(甚至是编码风格)提供任何信息,我将不胜感激。该问题需要一个函数,该函数删除循环链表中所有出现的int,并返回列表中的任何节点或NULL(当列表为NULL时)。 以下是我目前掌握的一些C代码: