题目:
实现一种算法,找出单向链表中倒数第 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; }