个人思路总结:
==这种题应该是单链表类型的经典题目了吧!==其实就是一个快慢指针问题,掌握这个思维的话,做这种题我个人感觉类似于做1+1=2这种题目。由于过于简单,我就不写思路了,看代码吧。
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *link1=head, *link2=head;
ListNode* pre = nullptr;
if(head==nullptr)
return nullptr;
while(n>1)
{
link1 = link1->next;
n--;
}
while(link1->next!=nullptr)
{
pre = link2;
link1 = link1->next;
link2 = link2->next;
}
//这里是唯一需要注意的坑,比如{[1,2],2}、{[1,2,3],3}这种输入。这个注意到的话,别的就不是问题了
if(pre==nullptr)
return link2->next;
pre->next = link2->next;
return head;
}
};