題目:
給你一個鏈表,刪除鏈表的倒數第?n
?個結點,并且返回鏈表的頭結點。
示例 1:
輸入:head = [1,2,3,4,5], n = 2 輸出:[1,2,3,5]
示例 2:
輸入:head = [1], n = 1 輸出:[]
示例 3:
輸入:head = [1,2], n = 1 輸出:[1]
提示:
- 鏈表中結點的數目為?
sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
解答:
首先,這種問題可以使用雙指針(快慢指針)來解決,先讓快指針移動N+1步驟(N指第N個節點),慢指針不動,最后快慢指針一起移動,移動到快指針指向鏈表最后的NULL停止。
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* xu = new ListNode(0,head);ListNode* slow=xu;ListNode* fast=head;//刪除第n個節點,需要快指針移動n+1步,所以多的+1這一步就讓他指向頭節點就可以了while(n--){//快指針走n步fast=fast->next;}while(fast!=NULL){//快慢指針一起走,走到快指針指向空fast=fast->next;slow=slow->next;}slow->next=slow->next->next;//此時慢指針指向想要刪除節點的前一個位置,可以進行刪除了return xu->next;}
};