一般思路:
先遍歷鍊錶,計算出煉表中的元素個數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 ...