面試題22 鍊錶中倒數第k個結點

2021-10-02 13:43:45 字數 893 閱讀 3357

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

如果是雙向鍊錶,可以遍歷到最後乙個,再通過prev指標找到倒數第k個。

如果是單向鍊錶,訪問倒數第k個,需要遍歷n-k+1個結點,但是獲取n的時候,需要遍歷一遍鍊錶,這不是最佳的解決方案。

為了實現只遍歷鍊錶一次就能找到倒數第k個結點,我們可以定義兩個指標,第乙個指標從鍊錶的頭指標開始遍歷走k-1步,第二個指標保持不動,從第k步開始,第二個指標從煉表頭開始遍歷,兩個指標距離保持k-1,走在前面的指標到達鍊錶的尾結點時,走在後面的指標正好指向倒數第k個結點。

需要注意的點:如果輸入的k大於鍊錶的總長度了,就不存在倒數第k個的問題了。如果輸入的k<1,也是無意義的值。

package com.wsy;

class node

public node(int value, node next)

public int getvalue()

public void setvalue(int value)

public node getnext()

public void setnext(node next)

}public class main

public static node init()

public static void find(node head, int k)

node quick = head;

node slow = head;

for (int i = 0; i < k - 1; i++) else

}while (quick.getnext() != null)

system.out.println(slow.getvalue());

}}

面試題22 鍊錶中倒數第k個結點

一 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。二 關鍵 1.兩個指標的思想。2.三個魯棒性問題。1 輸入的...

面試題22 鍊錶中倒數第K個結點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。思路 雙指標法,第乙個指標 first 先走 k 步,第二個指標 ...

面試題22 鍊錶中倒數第k個節點

假如單鏈表有n個節點,倒數第k個節點,即為n k 1 利用雙指標進行判斷,前指標走到k 1的位置,即開頭的k 1位置,然後讓後指標跟前指標一起走 當前指標到達尾部的時候,後指標剛好到達倒數第k個節點 include struct listnode 假如單鏈表有n個節點,倒數第k個節點,即為n k 1...