LeetCode 19. 刪除連結串列的倒數第N個節點(Remove Nth Node From End Of List)
阿新 • • 發佈:2018-12-18
題目描述
給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。
示例:
給定一個連結串列: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,連結串列變為 1->2->3->5.
說明:
給定的 n 保證是有效的。
進階:
你能嘗試使用一趟掃描實現嗎?
解題思路
連結串列結構: (頭節點)1->2->3->4->5->NULL 典型的利用典型的利用雙指標法解題。定義兩個指標,剛開始分別指向頭結點,然後先讓一個指標first先走n步,接著讓指標second指向頭結點,並和first一起向後移動。當first的next指標為NULL時,second即指向了要刪除節點的前一個節點,接著讓first指向的next指標指向要刪除節點的下一個節點即可。
注意: 如果要刪除的節點是首節點,那麼first向後移動結束時會為NULL,這樣加一個判斷其是否為NULL的條件,若為NULL則返回頭結點的next指標。
程式碼展示
/**
* 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* first=head;
while(n--!=0){
first=first->next;
}
if(!first){
return head->next;
}
ListNode* second=head;
while(first->next!=NULL){
first=first->next;
second=second-> next;
}
second->next=second->next->next;
return head;
}
};