找到單鏈表倒數第n個節點,保證鍊錶中節點的最少數量為n。 樣例
給出鍊錶3->2->1->5->null
和n = 2,返回倒數第二個節點的值1.
一種是先遍歷一遍單鏈表,計算鍊錶的長度,然後再次遍歷,直到到達節點數減去n的節點,返回結果。
實際情況中若鍊錶數目很多而n相對不大,這種方法需要大約兩次遍歷。
更簡單的是採用雙指標。快指標比慢指標提前n個單元。當快指標到達單鏈表尾部時,慢指標指向待刪除節點的前節點。
雙指標方法可以解決很多問題,比如上乙個求單鏈表是否有環,也是使用兩個指標,乙個進一步,乙個進兩步,如果有環兩指標就會相遇。
/**
* definition of listnode
* class listnode
* }*/class solution
listnode *p=head;
listnode *pre=head;
while(--n)else
}while(p->next)
return pre;
}};
Lintcode 166 鍊錶倒數第n個節點
最開始的想法是先計算出鍊錶的長度length,然後再從頭走 length n 步即是需要的位置了。ac definition for listnode.public class listnode public class solution for int i length n i 0 i retur...
166 鍊錶倒數第n個結點
原題 您在真實的面試中是否遇到過這個題?是 標籤鍊錶 cracking the coding interview 思路 首先應該清楚,若鍊錶一共有t個結點,則正數第n個結點即倒數第t 1 n個結點。反過來也一樣,倒數第n個結點是正數第t 1 n個結點。明白這點後可以使用兩根指標cur pre來操作。...
Lintcode 鍊錶倒數第n個節點
找到單鏈表倒數第n個節點,保證鍊錶中節點的最少數量為n。給出鍊錶 3 2 1 5 null和n 2,返回倒數第二個節點的值1.思路 計算單鏈表長度length,然後遍歷單鏈表找出第 length n 1 個結點 耗時 54ms listnode nthtolast listnode head,int...