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

2021-08-05 23:52:44 字數 997 閱讀 8181

那麼,這次來說乙個具體的問題吧,乙個單向鍊錶中有n個結點,現在要求列印鍊錶中的倒數第k個結點,應該怎樣實現?

普通人反映出的第乙個思路應該是先遍歷一遍整個鍊錶知道鍊錶的長度len,然後要輸出倒數第k個就是正數的第len-k+1個結點,那麼只需要遍歷鍊錶到這個結點然後列印就好了。顯然這個方法需要遍歷2次鍊錶,能不能只遍歷一次就能輸出這個結點呢,講道理是可以的。我們需要有2個指標,乙個先走k-1步,然後一起向後遍歷然後當後面的指標走到尾結點的時候,另乙個指標就指向了我們需要輸出的那個結點。現在我用乙個簡單的例子來說明一下這個東西它是真的,現在鍊錶中有1,2,3,4,5,6,列印倒數第3個,也就是這個4。首先有倆指標find是需要列印的,assist是輔助我們找到這個位置的。

1.一開始他倆都指向頭結點。

2先讓assist向後走2步。

3assist遍歷到尾結點

這時候find指向的就是需要列印的倒數第三個結點了。

然後是函式**

這是定義的結構體

typedef struct l

list_node;

然後是函式

list_node *find_tail_k(list_node *phead,int k)

list_node *p = phead;

list_node *q = phead;

for(int i = 0;inext != null)

else

while(p->next != null)

return q;

}}

解釋一下幾個if判斷,這幾個if都是來保證這個函式不論遇到多麼不科學的傳入的值都不會崩潰,當傳入的頭指標是空,也就是鍊錶為空和尋找倒數第0個的時候,避免程式崩潰。另外當輸入的k大於鍊錶總長度的時候,比如一共10個數找倒數第11個的時候,避免崩潰。

就這樣。。。

單鏈表查詢倒數第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 如果找到了,則返回該節點,否則返...

求解單鏈表中倒數第k個節點

題目 求解單鏈表中倒數第k個節點。思路 第一種方法 先遍歷一遍單鏈表記錄長度n,然後從頭遍歷n k步即可 初始化為頭結點 begin end 注意距離是k 1,然後兩個指標同步執行,直至end到尾巴節點,需要處理的情況,是k是否大於鍊錶長度。即start null,這是因為我們通常習慣從倒數第1個節...