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

矫情吗;* 2022-12-29 02:15 203阅读 0赞

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

故心故心故心故心小故冲啊


文章目录

  • 剑指 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. var getKthFromEnd = function(head, k) {
  2. let fast = head;
  3. let slow = head;
  4. //先让快指针先走
  5. while(fast){
  6. k--;
  7. //当走完k 满指针开始走
  8. if(k<0){
  9. slow = slow.next;
  10. }
  11. fast = fast.next;
  12. }
  13. //等到快指针走完,慢指针就是所求的
  14. return slow
  15. }

在这里插入图片描述

解法二:栈方法

  1. //栈方法
  2. let stack = [];
  3. let ans = [];
  4. //所有进栈
  5. while(head){
  6. stack.push(head);
  7. head = head.next;
  8. }
  9. //出栈
  10. while(k>0){
  11. //stack.pop();返回最后一个删除的元素
  12. ans = stack.pop();
  13. k--;
  14. }
  15. return ans;

在这里插入图片描述

发表评论

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

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

相关阅读