题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
方法:一趟扫描法
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* tmp = head->next;
while(tmp && n--)
{
tmp = tmp->next;
}
ListNode* p = head;
while(tmp)
{
tmp = tmp->next;
p = p->next;
}
if(n == 1) //说明删除的是第一个结点
head = head->next;
//p = p->next;//这句不能替代head = head->next;
else
p->next = p->next->next;
return head;
}
};