19. 删除链表的倒数第N个节点

难度中等947收藏分享切换为英文关注反馈

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

1
2
3
给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗

快慢指针的想法来实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* 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* l;
ListNode*r;
l=head;
r=head;
ListNode* temp;

int cnt=0;
for(cnt=0;cnt<n;cnt++){
r=r->next;
}
if(r==nullptr){
return head->next;

}
//cout<<r->val<<endl;
while(r->next!=nullptr){
r=r->next;
l=l->next;
}
// cout<<l->val<<endl;
l->next=l->next->next;


return head;


}
};