leetcode#19 Remove Nth Node From End of List
阿新 • • 發佈:2018-09-28
ber 指針 lang bsp for style Language 示例 opera
給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。
示例:
給定一個鏈表: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鏈表變為 1->2->3->5.
說明:
給定的 n 保證是有效的。
進階:
你能嘗試使用一趟掃描實現嗎?
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };*/ class Solution { public: //如果要遍歷一次,必須快慢指針,而n始終有效,我們可以大膽地遍歷 //要刪除倒數第n個指針,我們要遍歷到倒數第n-1個指針 //一個遍歷了length 一個遍歷了length-n ListNode* removeNthFromEnd(ListNode* head, int n) { auto h=head; while(n>0)//讓h前進n個結點 { h=h->next; n--; }if(!h) return head->next;//h到了尾部,恰好是要刪除的結點 auto slow=head;//然後讓slow和h一起移動,這樣slow的next就是待刪除結點,h的next是null while(h&&h->next)//移動n次之後,自己可能在tail,或者下一個是tail { h=h->next; slow=slow->next; } auto temp=slow->next->next;//我們沒有刪除那個結點,因為我們不在乎內存泄露slow->next=temp; return head; } };
leetcode#19 Remove Nth Node From End of List