这篇文章主要介绍了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;
}
今天的分享就到这里了,有什么问题的地方欢迎大家指出。
领取专属 10元无门槛券
私享最新 技术干货