劍指Offer 程式設計題15(鍊錶中倒數第k個結點)

2021-07-15 15:15:15 字數 1115 閱讀 4858

public static class listnode
解題思路:

為了實現只遍歷鍊錶一次就能找到倒數第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)

// 返回結果

劍指offer 題15(反轉鍊錶)

反轉鍊錶 輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。coding utf 8 class listnode def init self,x self.val x self.next none class solution 返回listnode defreverselist self,phead w...

15 劍指offer 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。分析 1 2 3 4 5 1 2 3 4 5 而且這個題難在沒有頭節點 第一種方法是 非遞迴方法 struct listnode class solution return preversehead 第二種方法是 遞迴方法 struct listnode ...

15 反轉鍊錶(劍指offer)

15.反轉鍊錶 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。1.思路 這裡可以採用輔助指標的方式來進行歷求解,以下面的鍊錶為例具體分析如下 1 首先我們需要定義三個指標,分別指向當前結點 cur 前一結點 prev 後一節點 next 2 然後開始從前往後進行遍歷,在遍歷的過程中對指標進行反轉 第...