劍指offer 15 鍊錶中倒數第k個結點

2021-06-22 23:50:09 字數 1259 閱讀 6364

package listtest.findknode;

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

* 思路:定義兩個指標,第乙個指標從鍊錶的頭指標開始遍歷向前走k-1,

* 第二個指標保持不動,從第k步開始,

* 第二個指標也開始從鍊錶的頭指標開始遍歷。

* 兩個指標距離保持在k-1,當第乙個指標到達鍊錶的尾結點時,第二個指標正好是倒數第k個結點。

* 問題:1、輸入的頭指標為空指標;

* 2、輸入的以head結點開頭的鍊錶的結點數少於k;

* 3、輸入的引數k為0。

* 考點:考查對鍊錶的理解;

* 考查**的魯棒性。魯棒性:程式能夠判斷輸入是否合乎規範要求,

* 並對不合要求的輸入予以合理的處理。

* 魯棒性編碼:1、比如試圖開啟檔案時發現檔案不存在,我們可以提示使用者檢查檔名和路徑。

* 2、當伺服器連線不上時,我們可以試圖連線備用伺服器。

* 測試用例:功能測試:(第k個結點在鍊錶的中間,第k個結點是鍊錶的頭結點,第k個結點是鍊錶的尾結點。)

* 特殊輸入測試(煉表頭結點為null指標,鍊錶的結點總數少於k,k等於0。)

* @author summ

* */

public class findktolink

listnode pnode = head;

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

} listnode qnode = head;

while (pnode.next != null)

return qnode; }

public static void main(string args) else

}}

結點類:

package listtest.findknode;

/** *

* @author summ

* */

public class listnode

public int getdata()

public void setdata(int data)

public listnode getnext()

public void setnext(listnode next)

}

劍指Offer15鍊錶中倒數第k個結點

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點,為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第乙個結點,例如 乙個鍊錶有6個結點,從頭結點開始他們的值依次是1,2,3,4,5,6.這個鍊錶的倒數第三個結點是值為4的結點。分析 這是乙個很經典的老的題,如果第一次看到這個題的話,可能想...

劍指offer 15 鍊錶中倒數第k個結點

class listnode 題目 輸入乙個鍊錶輸出鍊錶的倒數第k個結點 解法 設定兩個標記,先讓第乙個走k步,接著讓他們同步移動,知道第乙個到末尾,第二個則為倒數第二個結點 public class main public static listnode reverselist listnode ...

劍指offer 15 鍊錶中倒數第n個節點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始,即鍊錶的尾節點是倒數第乙個節點。例如乙個鍊錶有6個節點,從第乙個節點開始它們的值是1 2 3 4 5 6。這個鍊錶倒數第3個節點是值為4的節點。指定兩個指標pbefore和pafter,均指向第乙個節點,起先前面的指標p...