資料結構之線性表 倒數第k個結點

2021-06-13 15:49:43 字數 936 閱讀 6761

題目:

已知乙個帶有頭結點的單鏈表,結點結構為:

data

link

在不改變鍊錶的情況下,設計乙個盡可能高效的演算法,查詢鍊錶中倒數第k個結點,若查詢成功,輸出該結點data的值,並返回1,否則返回0.

分析:

本題的關鍵是設計乙個盡可能高效的演算法,通過鍊錶的一遍遍歷,找到倒數第k個結點的位置。基本思想:定義兩個指標變數,初始時均指向頭結點的下乙個結點,其中乙個指標沿鍊錶移動;當該指標移動到第k個結點時,另乙個指標開始與該指標同步移動;當第乙個指標移動到鍊錶結尾時,第二個指標所指示的結點即為倒數第k個結點。(本題還可採用兩遍遍歷、遞迴演算法、輔助陣列等實現,但都不是最佳解法)

**:

[cpp]view plain

copy

#include 

#include 

typedef

intelemtype;  

typedef

struct

lnode lnode, *linklist;  

intsearch_k(linklist list, 

intk)  

else

p = p->link;  

}  if

(count 

else

}  linklist creatlist()  

r->link = null;  

return

list;  

}  int

main()    

測試結果:

資料結構之線性表 倒數第k個結點

題目 已知乙個帶有頭結點的單鏈表,結點結構為 data link 在不改變鍊錶的情況下,設計乙個盡可能高效的演算法,查詢鍊錶中倒數第k個結點,若查詢成功,輸出該結點data的值,並返回1,否則返回0.分析 本題的關鍵是設計乙個盡可能高效的演算法,通過鍊錶的一遍遍歷,找到倒數第k個結點的位置。基本思想...

資料結構 鍊錶中倒數第k個結點

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

資料結構 鍊錶中倒數第K個結點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。解題思路 定義兩個指標,乙個指標先走k 1步另乙個指標再開始走,當第乙...