剑指 Offer 22. 链表中倒数第k个节点

ゝ一纸荒年。 2022-09-09 14:57 222阅读 0赞

剑指 Offer 22. 链表中倒数第k个节点

难度:简单

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

示例:

给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.

思路:

1.定义两个指针,使快指针先走K步(最多走到链表末尾)。
2.两个指针同时往后移动,当快指针走到链表末尾(nullptr)的时候,此时慢指针就在倒数第K个节点的位置。

  1. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
  2. class Solution {
  3. public:
  4. ListNode* getKthFromEnd(ListNode* head, int k) {
  5. ListNode* Slow=head;
  6. ListNode* Fast=head;
  7. while(k--&&Fast)
  8. {
  9. Fast=Fast->next;
  10. }
  11. while(Fast)
  12. {
  13. Fast=Fast->next;
  14. Slow=Slow->next;
  15. }
  16. return Slow;
  17. }
  18. };

发表评论

表情:
评论列表 (有 0 条评论,222人围观)

还没有评论,来说两句吧...

相关阅读