劍指offer 列印鍊錶倒數第k個結點

2022-05-24 17:03:09 字數 858 閱讀 3425

看到這個題目,我們很容易想到一種做法,遍歷兩次鍊錶,一次得到鍊錶長度,另外一次得到倒數第k個結點。

不過要注意的是邊界值的測試

於是我的做法如下:

public static listnode findkthtotail(listnode head,int k) 

listnode prehead=new listnode(0);

prehead.next=head;

int length=0;

listnode p=prehead;

while(p!=null)

if(k>=length)

p=prehead;

int i=0;

while(p!=null)

p=p.next;

i++;

}return null;

}

後來看了劍指offer以後,發現其實還有一種做法,不需要遍歷鍊錶兩次,用的是兩個指標。 

思路如下:

public static listnode findkthtotail(listnode head,int k)

//先讓p1指向頭結點

listnode p1=head;//指向頭指標算是移動了1次,所以i從1開始

//p1移動k-1次,則可以移動到第k個節點

for(int i=1;i而且還有乙個邊界值需要測試的,就是當k小於等於0的時候,應該返回空,若不加以判斷,在上面這個程式中,返回值是不對的,因為k=0,所以p1沒有移動過。這時p1,p2同時移動到最後乙個值,最後返回的是最後乙個值。

這道題提醒我們要注意**的魯棒性(rebust),也就是健壯性,要注意判斷各種可能出現的不合法的輸入。

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

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。思想 利用兩個指標,第乙個指標f到達k之後,新建乙個指標sencond,遍歷最後乙個時sencond則為倒數第k個結點 coding utf 8 class listnode def init self,x self.val x self.next n...

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

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點.這種考題是比較簡單的一種,以前也碰到過類似的題目,從耗時來說,一般都是使用兩個指標,一前一後的走,中間間隔k或者k 1個步長,這個視判斷語句而定。當前乙個指標走到末端時,後乙個指標正好落在倒數第k個節點處,直接返回該節點。code public c...

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

輸入乙個鍊錶,輸出該鍊錶中倒數第k 個結點。從 1開始計數,即該鍊錶的尾節點是倒數第乙個結點。思路 一 鍊錶是單向鍊錶,只能從頭結點往後依次遍歷,倒數第k 個結點,也就是從頭結點開始的 n k 1 個結點。但是需要先遍歷一遍得到鍊錶長度,然後在找第 n k 1的k 結點。二 1 方法一需要對鍊錶進行...