题目:给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
本题需要使用双指针,需要注意的点:
1、双指针都指向头结点
2、快指针提前移动n+1个点
3、结束条件:快指针指向空指针
4、慢指针指向要删除结点的前一个结点
5、删除结点时需要创建一个临时结点,然后释放
class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummyHead = new ListNode(0); dummyHead->next=head; ListNode* fast=dummyHead; ListNode* slow=dummyHead; while( n+1 &&fast!=NULL) { fast=fast->next; n--; } while(fast!=NULL) { fast=fast->next; slow=slow->next; } ListNode* tmp=slow->next; slow->next=slow->next->next; delete tmp; return dummyHead->next; } };
标签:结点,slow,ListNode,fast,next,链表,节点,倒数第 From: https://www.cnblogs.com/gaishuobulao/p/17357179.html