經典面試題 尋找單鏈表倒數第n個節點 C C

2021-05-27 14:05:21 字數 586 閱讀 7530

面試中經常出現的程式設計題之一。

最直接的辦法是先遍歷一遍單鏈表,記下鍊錶的節點數,然後再次遍歷,直到到達節點數減去n的節點,返回結果。實際情況中若鍊錶數目很多而n相對不大,這種方法需要大約兩次遍歷。更簡單的實現方法是採用雙指標。乙個指標先從煉表頭開始步進n步,然後另乙個指標從頭開始,兩個指標一同步進直到達到鍊錶尾。這是第二個指標所指的節點即為鍊錶的倒是第n個節點。實現**如下:

struct node * lastn(struct node * head, int n)  

q = head;

while(--n)

q = q->next;

} p = head;

while(q->next)

return p;

}

需要注意一些特殊情況的檢查:

1.n大於節點數目

2.引數n為0或者負數

3.引數head為空指標

雙鏈表方法可以實現很多問題的解答,還有乙個例子是求單鏈表是否有環。這時可以使用兩個鍊錶,乙個步進一步,乙個步進兩部,如果有環兩煉表就會相遇。

摘自:

筆試or面試 尋找單鏈表倒數第n個元素

在各種面試筆試中,單鏈表考察的最多。其中有一道經典的題目 尋找單鏈表倒數第n個元素 如果僅僅是這麼問,大多數人想到這不是很簡單麼 先遍歷整個鍊錶獲知整個鍊錶長度l,然後再l n 1個節點就是所求節點。但很顯然面試官不滿足於這種問題,而是 一次遍歷尋找單鏈表倒數第n個元素 這樣的話,該如何找到思路呢?...

刪除單鏈表倒數第n個節點

如何刪除單鏈表中的倒數第n個節點?先遍歷一遍單鏈表,計算出單鏈表的長度,然後,從單鏈表頭部刪除指定的節點。description 刪除單鏈表倒數第n個節點,常規解法.param head param n return listnode public static listnode removenth...

尋找單鏈表中倒數第k個結點

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1,2,3,4,5,6.這個鍊錶的倒數第3個結點是值為4的結點。思路分析 為了得到倒數第k個結點,很自然的想法是先走到鍊錶的...