《劍指offer》面試題22 鍊錶中倒數第k個節點

2021-09-03 02:48:42 字數 1004 閱讀 7831

鍊錶節點定義如下:

struct listnode

思路:

定義兩個指標,第乙個指標先指向第k個節點,既向前走k-1步,然後另第二個指標指向頭結點,然後兩個指標一起向後移動,直到第乙個指標走到最後乙個節點時,此時第二個指標正好指向倒數第k個節點。

注意:1.要判斷輸入是否為空指標,若為空指標,**試圖訪問空指標會造成程式崩潰,所以此時要返回nullptr。

2.若k大於鍊錶的節點數,此時也會試圖訪問空指標,也要返回nullptr。

3.k==0時,k-1是無符號數,不是-1,也會造成崩潰。

4.先讓快指標走 k-1 步,並且當最後快指標指向最後乙個元素(並非指向null)時停止。

package chapter3;

public class p134_kthnodefromend

}public static listnode findkthtotail(listnode head,int k)

}public static listnode findmiddlenode(listnode head)

return cur;

}public static void main(string args)

}

listnode* findkthtotail(listnode* plisthead, unsigned int k) 

else //如果鍊錶的節點數少於k,返回乙個nullptr

}p2=plisthead;

while (p1->next!=nullptr) //直到p1指向鍊錶末尾

return p2;

}

測試用例:

a.功能測試(第k個節點在鍊錶的中間;第k個節點是鍊錶的頭節點;第k個節點是鍊錶的尾節點)。

b.特殊輸入測試(煉表頭節點為nullptr指標;鍊錶的節點總數少於k;k等於0)。

參考:

劍指offer 面試題 22 鍊錶中倒數第K個節點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。注意 樣例 輸入 鍊錶 1 2 3 4 5 k 2 輸出 4先判斷 k 的合法性,如果 k 0,則返回null。求出鍊錶的長度。再判斷k是否大於鍊錶的長度。如果大於,則返回null,否則繼續。從頭開始遍歷 len k 個節點,則下乙個節點,也就是第 len ...

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

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。第一次遍歷鍊錶,計算鍊錶長度length 第二次遍歷鍊錶,讓指標向後移動length k次,就可以得到倒數第k個結點。鍊錶結點的資料結構 public class listnode public class solution listnode p head,...

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

面試題22 鍊錶中倒數第k個結點 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。方法一 遍歷鍊錶兩次,第一次統...