C語言 鍊錶中倒數第k個節點

2021-10-01 12:45:29 字數 1141 閱讀 8940

一般思路:

先遍歷鍊錶,計算出煉表中的元素個數n,倒數第k個元素是正數第n-k+1個元素,因此再遍歷一次鍊錶即可。

linknode*

findthtotail

(linknode* head,

unsigned

int k)

if(count < k)

return

null

; linknode* find = head;

for(

int i =

1; i <= count - k;i++

)//find->next = null; //該語句是為了輸出倒數第k個節點,

//如果不加,則輸出從倒數第k個節點開始的鍊錶

return find;

}

更好的解法:

只遍歷一次鍊錶就得到結果。

思路:建立指標pointer,向前移動k-1個節點;

然後建立指標find,從第k個節點開始,find與pointer同步右移;

直至pointer為空,此時find正好移動了n-k個節點,指向鍊錶的第n-k+1個節點;

返回該節點。

注意:問清楚面試官返回的是單節點還是從要找的節點開始的鍊錶。

linknode*

findthtotail

(linknode* head,

unsigned

int k)

else}if

(i < k)

//如果遍歷完整個鍊錶i(i是鍊錶中節點個數)還是小於k

//說明該鍊錶的倒數第k個節點不存在,因此返回空

return

null

;return find;

}

主函式:

int

main()

與鍊錶相關的定義和函式在標頭檔案structdef.h中,可在文章c語言:刪除鍊錶中的重複節點(二)中查詢。

鍊錶為:1->2->3->4->5->6->7->8

鍊錶中倒數第k個節點

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。struct listnode方法 定義兩個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k 1,第二個指標保持不動 從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k 1,當第乙個 走在前面的 指標到達鍊錶的尾結點時,第二...

鍊錶中倒數第k個節點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。ac class solution def findkthtotail self,head,k write code here 將每個節點存在棧裡,選取stack中第k個值 stack while head head head.next if k len s...

鍊錶中倒數第k個節點

acwing打卡活動 劍指offer 打卡活動 周二第十題 鍊錶中倒數第k個節點 definition for singly linked list.public class listnode 思路 設列表總結點數為n,則n k 1 為該列表的倒數第k個節點 如 n 10,k 2,則 10 2 1 ...