题目:

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

注意:本题相对原题稍作改动

示例:

输入: 1->2->3->4->5 和 k = 2
输出: 4
说明:

给定的 k 保证是有效的。

分析:

双指针做法,快慢指针初始化为头指针,先让快指针向后移动k个节点,然后快慢指针同时向后移动,当快指针所指元素为空时,慢指针的元素恰好是倒数第k个元素。

递归法,设置全局变量记录已经访问到倒数第几个节点,先递归遍历到最后一个节点,再向前找,更新变量值,当等于k时,返回当前结点的val值即可。

程序:

/**
 * 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 f = head;
        ListNode s = head;
        int num = k;
        while(num > 0){
            f = f.next;
            num--;
        }
        while(f != null){
            f = f.next;
            s = s.next;
        }
        return s.val;
    }
}
/**
 * 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) {
        if(head == null)
            return -1;
        int v = kthToLast(head.next, k);
        K++;
        if(K == k){
            return head.val;
        }
        return v;
    }
    private int K = 0;
}

 

相关文章:

  • 2022-12-23
  • 2021-06-08
  • 2022-12-23
  • 2021-10-24
  • 2021-09-16
  • 2022-02-10
  • 2021-06-28
  • 2021-05-23
猜你喜欢
  • 2021-09-03
  • 2022-02-19
  • 2021-08-24
  • 2022-12-23
  • 2021-07-05
  • 2021-11-26
  • 2021-10-21
相关资源
相似解决方案