一、题目
二、题目分析
1.第一种解法:遍历两次,第一次遍历求出链表长度,第二次遍历找到k 个节点,为什么要怎么做:本题中的链表是单向链表,单向链表的节点只有从前往后的指针而没有从后往前的指针;假设整个链表有n个节点,那么倒数第K个节点就是从头节点开始的第n-k个节点。
2.第二解法:双指针解法;快慢指针,fast的指针要先走k+1,slow的指针要再head的位置上,此时fast - slow = k ;所以两个指针分别都向链表后面走,当fast指向为空的时候,slow的位置就在k上,如何去实现?先让fast slow都在head上,然后让fast先走k+1的节点
三、代码
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @param {number} k * @return {ListNode} */ var getKthFromEnd = function(head, k) { let p = head; let sum =0; //计算链表长度 while(p){ p = p.next; sum ++; } p = head; for(let i = 0; i < sum-k; i++){ p = p.next; } return p; };
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @param {number} k * @return {ListNode} */ var getKthFromEnd = function(head, k) { let fast = head, slow = head; while(fast && k){ fast = fast.next; k--; } while(fast){ fast = fast.next; slow = slow.next; } return slow; };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?