C++删除链表中间节点的方法
本文实例讲述了C++删除链表中间节点的方法。分享给大家供大家参考,具体如下:
题目:
给定链表头结点head,实现删除链表的中间节点函数。
解题思路及代码:
快慢指针,快指针走两步,慢指针一步。
当快指针走到终点时,慢指针正好是链表中间节点,删除此节点即可。
链表结构定义:
typedefstructNode { intdata; structNode*next; }node,*pLinkedList;
算法C++代码:
Node*removeMidNode(pLinkedListhead) { if(head->next==NULL||head==NULL) returnhead; if(head->next->next==NULL) returnhead->next; pLinkedListfast=head; pLinkedListslow=head; pLinkedListpre=NULL; /* head12345 preslowfast */ //1个节点 if(head->next->next==NULL) returnhead->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; returnhead; }
希望本文所述对大家C++程序设计有所帮助。