leetcode 19. 删除链表的倒数第N个节点 medium
题目描述:
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
解题思路:
双指针。首先为了避免讨论要删除头节点,先加一个dummy节点,然后快指针先走n步,再快慢指针同时前进,最后快指针先指向最后一个节点,慢指针指向倒数第n+1个节点。
代码:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(n<1 || head==nullptr)
return nullptr;
ListNode root(0);
ListNode *dummy=&root;
dummy->next=head;
ListNode *cur=dummy;
for(int i=0;i<n && cur;++i){ // 因为从傀儡节点开始,并且pre停在要被删节点的前一个节点,所以先走n步
cur=cur->next;
}
if(cur==nullptr)
return nullptr;
ListNode *pre=dummy; // pre是要被删的节点的前一个
while(cur->next){
cur=cur->next;
pre=pre->next;
}
pre->next=pre->next->next;
return dummy->next;
}
};