题目:
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
思路:
1.使用双指针的方法,快指针先移动n个节点,慢指针再跟着快指针移动,最后快指针指向尾部的时候,慢指针指向倒数第n个节点
2.需要手动画一下,删除倒数第n个节点,需要让slow指向要删除节点的上一个节点
代码详解
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummyhead = new ListNode(0); //虚拟头节点
dummyhead->next = head;//指向头节点
ListNode* fast = dummyhead;//快指针
ListNode* slow = dummyhead;//慢指针
while(n--){//快指针先走n步
fast = fast->next;
}
while(fast->next != NULL){//判断条件
fast = fast->next; //快指针前移
slow = slow->next;//慢指针前移
}
ListNode* temp = slow->next; //临时保存要删除的节点
slow->next = slow->next->next;//删除节点
delete temp;//清除内存
return dummyhead->next;//返回头节点
}
};