C++删除链表中间节点的方法
本文实例讲述了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++程序设计有所帮助。
以上是 C++删除链表中间节点的方法 的全部内容, 来源链接: utcz.com/z/346667.html