当前位置:   article > 正文

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

leetcode返回第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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

四、算法改进
采用双指针法,先让一个指针领先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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号