演算法分析 查詢單鏈表中的倒數第k個元素和中間元素

2021-07-04 04:46:59 字數 863 閱讀 6323

題目表述: 

1.設計乙個演算法,找出乙個無環的單鏈表裡面倒數第k個元素,速度要快。

2.設計乙個演算法,找出乙個無環的單鏈表裡中間元素

1.演算法實現:

實現中的注釋已經解釋了演算法的大概思想。

[cpp]view plain

copy

print?

struct

node;  

typedef

node* list;  

intfindlastkthelement(list list, 

intk)  

list p = list;  

list templist = list;  

intnum = 0;  

while

(p)  

else

if(num == k)  

p = p->next;  

}  if

(num < k)  

return

templist->key;  

}  

2.其實這類問題都可以設定兩個指標,比如二個問題,可以設定兩個指標,同時從頭開始遍歷,乙個快指標同時走兩步,乙個慢指標一次走一步,當快指標走到尾部時,則慢指標就到中間了。 1

listnode

*find_midlist(listnode

*head)29

p1 =

p2 =

head;

10while(1

)1117else

1821}22

return

p1;23

}

查詢單鏈表中倒數第k個節點

那麼,這次來說乙個具體的問題吧,乙個單向鍊錶中有n個結點,現在要求列印鍊錶中的倒數第k個結點,應該怎樣實現?普通人反映出的第乙個思路應該是先遍歷一遍整個鍊錶知道鍊錶的長度len,然後要輸出倒數第k個就是正數的第len k 1個結點,那麼只需要遍歷鍊錶到這個結點然後列印就好了。顯然這個方法需要遍歷2次...

單鏈表查詢倒數第K個節點

分析 p q兩個指標指向表頭結點,p向前移動k個位置後q向前移動,當p結點移到尾結點時,q的next指標域所指結點即為所求結點 若不存在k個結點,則當p指向尾結點時,k不為0。include include typedef struct node node,linklist linklist cre...

查詢單鏈表中的倒數第k個節點

解題思路 1 編寫乙個方法,接收head節點,同時接收乙個index 2 index表示是倒數第index個節點 3 先把鍊錶從頭到尾遍歷,得到鍊錶的總的長度getlength 4 得到size後,我們從鍊錶的第乙個開始遍歷 size index 個,就可以得到 5 如果找到了,則返回該節點,否則返...