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

2021-09-14 07:38:21 字數 901 閱讀 7946

這道題的題目可以描述為:輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

typedef   int datatype;

typedef struct listnode listnode;

//初始化

void listinit(listnode **ppfirst)

這道題的普通解題思路分為三步:

1.定義兩個指標forward和backward,forward從煉表頭的頭指標開始遍歷向前走k-1步,backward保持不動;

2.從第k步開始,第二個指標backward也開始從鍊錶的表頭開始遍歷;

3.由於兩個指標之間的距離保持在k-1,當指標forward到達尾結點時,backward正好指向倒數第看個結點;

**如下:

listnode * findtailk1(listnode *first, int k)

while (forward != null)

return backward;

}

同時我們應該注意到,在這個實現演算法中,如果輸入的k為0或輸入的以forward為頭結點的鍊錶結點數小於k,都會導致程式奔潰。所以,針對這些問題對演算法進行以下兩點改進:

1.如果輸入的k為0,直接返回null;

2.在第乙個while迴圈中加乙個if判斷條件,如果輸入的鍊錶的節點數小於k,返回null;

**如下:

listnode * findtailk2(listnode *first, int k)

while (k--)

else

}while (forward != null)

return backward;

}

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

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。示例 給定乙個鍊錶 1 2 3 4 5,和 k 2.返回鍊錶 4 ...

劍指 Offer 22 鍊錶中倒數第k個節點

劍指 offer 22.鍊錶中倒數第k個節點 難度 簡單 輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。示例 給...

劍指 Offer 22 鍊錶中倒數第k個節點

劍指 offer 22.鍊錶中倒數第k個節點 難度簡單56收藏分享切換為英文關注反饋 輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個...