題目:
已知乙個帶有頭結點的單鏈表,結點結構為:
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步另乙個指標再開始走,當第乙...