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

2021-08-02 19:01:38 字數 980 閱讀 7127

為了實現只遍歷鍊錶一次就能找到倒數第k 個結點,我們可以定義兩

個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k-1步,第二個指標保持不動;從第k 步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k-1 , 當第乙個(走在前面的)指標到達鍊錶的尾結點時,第二個指標(走在後面的)指標正好是倒數第k 個結點

public class test15 

/*** 輸入乙個鍵表,輸出該鍊錶中倒數第k 個結點.為了符合大多數人的習慣,

* 本題從1開始計數,即鍊錶的尾結點是倒數第1個結點.例如乙個鍊錶有6個結點,

* 從頭結點開始它們的值依次是1、2、3、4、5 6。這個鍊錶的倒數第3個結點是值為4的結點.

** @param head 鍊錶的頭結點

* @param k 倒數第k個結點

* @return 倒數第k個結點

*/public static listnode findkthtotail(listnode head, int k)

// 指向頭結點

listnode pointer = head;

// 倒數第k個結點與倒數第乙個結點相隔k-1個位置

// pointer先走k-1個位置

for (int i = 1

; i < k; i++)

// 已經沒有節點了,但是i還沒有到達k-1說明k太大,鍊錶中沒有那麼多的元素

else

}// pointer還沒有走到鍊錶的末尾,那麼pointer和head一起走,

// 當pointer走到最後乙個結點即,pointer.next=null時,head就是倒數第k個結點

while (pointer.next != null)

// 返回結果

return head;

}public static void main(string args)

}

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

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。鍊錶的節點定義如下,這裡使用的是c 來定義 public cla...

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

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。看到這道題目,最直觀的想法,就是先算出鍊錶的長度n,然後倒數第k...

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

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。看到這道題目,最直觀的想法,就是先算出鍊錶的長度n,然後倒數第k...