166 鍊錶倒數第n個結點

2022-05-12 02:03:07 字數 960 閱讀 1749

原題**:

您在真實的面試中是否遇到過這個題?  是

標籤鍊錶

cracking the coding interview

思路:首先應該清楚,若鍊錶一共有t個結點,則正數第n個結點即倒數第t+1-n個結點。反過來也一樣,倒數第n個結點是正數第t+1-n個結點

明白這點後可以使用兩根指標cur 、pre來操作。其中乙個指標cur走n步,指向第n個結點;

此時若cur的下乙個結點為空,說明n為節點總數,直接返回頭結點;

不為空,cur繼續向前走一直走到尾節點,同時pre與cur同步向後,一共走了(t-n)步,此時pre指向第 1+t-n個結點(初始pre指向head),即倒數第n個結點。

ac**:

/*

* * definition of listnode

* class listnode

* } */

class

solution

listnode l(0);

l.next=head;

listnode *cur=&l;

listnode *pre=head;

for (int i=0;i//

迴圈n次,cur指向第n個結點;

while(cur->next!=null)//

n不為結點總數(cur不為尾節點);

//pre與cur走了(t-n)步,pre指向第t-n+1個結點,即倒數第n個結點;

return

pre;

}};

若初始pre指向l,pre指向第t-n個結點,即倒數第n+1個結點,最後返回pre->next。

或者初始cur與pre均指向head,則cur可迴圈n-1次,指向第n個結點。然後cur走到尾節點,迴圈t-n次,pre跟著走,指向第1+t-n個結點,即倒數第n個結點。

LintCode 166 鍊錶倒數第n個節點

找到單鏈表倒數第n個節點,保證鍊錶中節點的最少數量為n。樣例 給出鍊錶3 2 1 5 null 和n 2,返回倒數第二個節點的值1.一種是先遍歷一遍單鏈表,計算鍊錶的長度,然後再次遍歷,直到到達節點數減去n的節點,返回結果。實際情況中若鍊錶數目很多而n相對不大,這種方法需要大約兩次遍歷。更簡單的是採...

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...

刪除鍊錶中倒數第n個結點

題目 給定乙個鍊錶,刪除鍊錶中倒數第n個節點,返回鍊錶的頭節點。注意事項 鍊錶中的節點個數大於等於n 您在真實的面試中是否遇到過這個題?yes 樣例給出鍊錶1 2 3 4 5 null 和 n 2.刪除倒數第二個節點之後,這個鍊錶將變成1 2 3 5 null.思路 這道題的思路十分奇特,那就是為了...