Description:
题目大意:删除单项链表的倒数第n个节点
解题思路:
算法标签:双指针
- 设置虚拟头节点
- 设置双指针 pre 和 last,使其两个指针相隔 n 个元素
- 双指针同时右移,直到 last 为 NULL
- 删除 pre 的下一个元素
- 返回 head
代码:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummyhead = new ListNode(0);
dummyhead -> next = head;
ListNode* pre = dummyhead;
ListNode* last = dummyhead;
for(int i = 0;i < n+1;i++)
last = last -> next;
while(last != NULL) {
pre = pre -> next;
last = last -> next;
}
ListNode* delNode = pre -> next;
pre -> next = delNode -> next;
delete delNode;
return dummyhead -> next;
}
};