【面试题 02.02】 返回倒数第 k 个节点

题目

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

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

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

说明:
给定的 k 保证是有效的。

实现思路

题目要求是返回倒数第k个节点,不要看错了,其次是保证k是有效的,也就是说不会出现找不到的情况。
假设有n个数,让你找倒数第2个数的值,从头结点开始遍历 遍历n-2次,可以直接定位到倒数第二个数,直接定位到数的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 temp = head;
        ListNode answer = head;
        //lenght获取节点个数也就是长度
        int lenght = 0;
        while (temp != null) {
            lenght++;
            temp = temp.next;
        }
        //当长度为1时 肯定返回当前节点的val
        if (lenght != 1) {
            int n = 0;
            while (answer!= null) {
                //定位到倒数第k个数 获取val值返回
                if (n == lenght - k) {
                    return answer.val;
                }
                n++;
                answer = answer.next;
            }
        }else{
            return head.val;
        }
        //乌无论如何都不会走这里
        return 0;
    }
}

你可能感兴趣的:(#,leetcode)