查詢鍊錶中倒數第k個節點

2021-09-01 10:08:44 字數 675 閱讀 5849

問題:輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊錶的倒數第3個節點是值為4的節點,鍊錶節點定義如下:

struct listnode

;

解題思路:由於單向鍊錶的節點只有從前往後的指標沒有從後往前的指標,因此從尾節點往前走k步的方法行不通。假設鍊錶有n個節點,那麼倒數第k個節點就是從頭節點開始的第n-k+1個節點。如果我們能夠得到鍊錶中的節點數,那麼只要從頭節點開始往後走n-k+1步就可以了。所以第一種方法,首先遍歷統計出煉表中節點的個數,再找到倒數第k個節點。另一種可以不用遍歷兩遍鍊錶,可以定義兩個指標,第乙個指標從鍊錶的頭指標開始遍歷向前走k-1步,第二個指標保持不動,從第k步開始,第二個指標也開始從煉表頭指標開始遍歷,由於兩個指標的距離保持在k-1,當第乙個指標到達鍊錶的尾節點時,第二個指標正好指向倒數第k個節點。

listnode *findknode(listnode *plisthead, unsigned int k)

pbehind = plisthead;

while(pahead->m_pnext != nullptr)

return pbehind;

}

查詢鍊錶中倒數第k個節點

1.題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。示例 給定乙個鍊錶 1 2 3 4 5,和 k 2....

鍊錶中倒數第k個節點

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。struct listnode方法 定義兩個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k 1,第二個指標保持不動 從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k 1,當第乙個 走在前面的 指標到達鍊錶的尾結點時,第二...

鍊錶中倒數第k個節點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。ac class solution def findkthtotail self,head,k write code here 將每個節點存在棧裡,選取stack中第k個值 stack while head head head.next if k len s...