提建議就是,有些題還是有聯系的,建議就收看完?876.鏈表的中間節點(http://t.csdnimg.cn/7axLa),再將這一題聯系起來
面試題 02.02. 返回倒數第k個節點
題目:
實現一種算法,找出單向鏈表中倒數第 k 個節點。返回該節點的值。
說明:
給定的 k 保證是有效的。
題目鏈接
力扣(LeetCode)官網 - 全球極客摯愛的技術成長平臺
文字 和 畫圖 分析
這題和快慢指針有點像(返回 876.鏈表的中間節點),我們定義兩個指針 fast指針 和 slow指針,都存放頭節點的地址
這里我們有兩種思路:
- fast 先比 slow 多走 k 步,然后同時走完鏈表(放循環里面)
- fast 先比 slow 多走 k - 1 步,然后同時走完鏈表(放循環里面)
第一種思路:
結束條件:
fast ==NULL
第二種思路:
結束條件:
fast->next == NULL
代碼
代碼一(思路一):
int kthToLast(struct ListNode* head, int k)
{struct ListNode*slow = head;struct ListNode*fast = head;while(k--){fast = fast->next;}while(fast){fast = fast->next;slow = slow->next;}return slow->val;
}
?代碼二(思路二):
int kthToLast(struct ListNode* head, int k)
{struct ListNode*slow = head;struct ListNode*fast = head;while(--k){fast = fast->next;}while(fast->next){fast = fast->next;slow = slow->next;}return slow->val;
}