1. 程式人生 > >leetcode#19 Remove Nth Node From End of List

leetcode#19 Remove Nth Node From End of List

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