LeetCode -面试题02.02. 返回到数第k个节点 -简单

一、题目描述
在这里插入图片描述
二、解题思路
先通过一次遍历确定链表的长度,再找出倒数第k个节点。

三、编程实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int kthToLast(ListNode head, int k) {
        ListNode h = head;
        int count = 1;

        while(h.next != null){
            h = h.next;
            count ++;
        }
        h = head;
        for(int i = 0; i < count - k; i++){
            h = h.next;
        }

        return h.val;
    }
}

四、算法改进
采用双指针法,先让一个指针领先k个节点,再让两个指针同时推进直至先行的那个指针指向null为止。(并没有快很多)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int kthToLast(ListNode head, int k) {
        // 初始化前继节点与后继节点
        ListNode previous = head;
        ListNode laterNode = head;
        // 后移后继节点,直到与前继节点距离相差为k
        for(int i=0;i<k;i++){
            laterNode = laterNode.next;
        }
        // 同时移动前后继节点,直到后继节点值为空,此时前继节点值即为答案
        while(laterNode!=null){
            laterNode = laterNode.next;
            previous = previous.next;
        }
        return previous.val;
    }
}

作者:GoogTech
链接:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci/solution/mian-shi-ti-0202-fan-hui-dao-shu-di-k-ge-jie-di-23/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值