• 程序员面试金典-面试题 02.02. 返回倒数第 k 个节点


    题目:

    实现一种算法,找出单向链表中倒数第 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;
    }
  • 相关阅读:
    一维数组
    do while循环(熟悉)
    while循环的概念和使用
    break关键字
    continue关键字
    for循环的概念与使用
    switchcase分支结构
    if else if else分支结构
    关于scanf()读取与返回值和回车键的问题
    WCF通过IIS寄宿服务
  • 原文地址:https://www.cnblogs.com/silentteller/p/12401802.html
Copyright © 2020-2023  润新知