• 剑指offer-链表中倒数第k个节点


    题目描述

    输入一个链表,输出该链表中倒数第k个结点。

    public class Test {
        
        class ListNode {
            int value;
            ListNode next;
            public ListNode(int value) {
                this.value = value;
            }
        }
        
        public static void main(String[] args) {
            Test t = new Test();
            ListNode node1 = t.new ListNode(1);
            ListNode node2 = t.new ListNode(2);
            ListNode node3 = t.new ListNode(3);
            ListNode node4 = t.new ListNode(4);
            ListNode node5 = t.new ListNode(5);
            ListNode node6 = t.new ListNode(6);
            ListNode node7 = t.new ListNode(7);
            node1.next = node2;
            node2.next = node3;
            node3.next = node4;
            node4.next = node5;
            node5.next = node6;
            node6.next = node7;
            node7.next = null;
            ListNode kThNode = t.findKthToTail(node1, 2);
            
            System.out.println(kThNode.value);
        }
        
        /**
         * 一次遍历找到倒数第k个节点
         * @param head
         * @param k  k从1开始
         * @return
         */
        public ListNode findKthToTail(ListNode head, int k) {
            // 输入的链表不能为空, k要大于0:  k从1开始,小于0没有意义
            if(head == null || k <= 0) return null;
    
            ListNode pForward = head; 
            ListNode pBehind = null;
            
            // 第一个指针先向前走k-1.
            for(int i=0; i<k-1; i++) {
                // 如果k大于节点数,next可能指向空 ,返回空
                if(pForward.next == null)
                    return null;
                pForward = pForward.next;
            }
            // 第二个指针暂时不动
            pBehind = head;
            
            // 两个指针一起移动
            // 当前面一个指针遍历到最后一个节点,此时后面一个指针刚好指向倒数第k个节点
            while(pForward.next != null) {
                pForward = pForward.next;
                pBehind = pBehind.next;
            }
            return pBehind;    
        }
    }  
  • 相关阅读:
    关于HTML标签
    windows bat 命令
    maven 基本用法
    idea 永久激活
    mysql 性能测试 mysqlslap 的使用介绍
    Javafx 入门教程(一)
    websocket server 服务端工具
    OPC 技术
    以http为例解读OSI七层协议
    Javafx 入门教程前言
  • 原文地址:https://www.cnblogs.com/zywu/p/5770517.html
Copyright © 2020-2023  润新知