Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一.题目
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有 6
个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6
。这个链表的倒数第 3
个节点是值为 4
的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
复制代码
二、思路分析:
这是一道难度为简单的offer题目
,基本上看到题目思路就很清晰,一种比较没有技巧的解法就是利用for循环
一直将指针遍历到了链表的尾部,然后再利用for循环
让指针指向倒数第K
个节点即可完成本题的解答。
但是这样解答出来的题目没有任何技巧可言,可能对于面试官来说你的这种解法在他看来并不是那么满意,所以需要对这个解法进行改良一下。我们需要将一个指针走K
步,然后再创建一个指针指向头节点
,随后让两个指针一起走,直到第一个指针走到了尾部为空的时候,它就完整走过了n
步,而第二个指针刚好走了n-k
步符合题目的要求,只需要返回第二个指针即可。
三、代码:
/**
* 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 p1 = head
let p2 = head
for(let i=0 ; i<k ; i++){
p1 = p1.next
}
while(p1){
p1 = p1.next
p2 = p2.next
}
return p2
};
复制代码
四、总结:
这道题也没有什么值得总结的点,主要还是需要了解倒数第k步的那个思路,注意一下返回值即可。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END