美文网首页
在单链表中查找倒数第k个结点

在单链表中查找倒数第k个结点

作者: 努力的土豆 | 来源:发表于2020-04-02 23:12 被阅读0次

在单链表中如何获得倒数第K个结点,最直接的方式,设置一个计数器,遍历完整个链表,获得链表的长度,然后计算获得倒数第k个结点。
但是上述方式,遍历链表2遍,效率并不好。如何一次获得结果?设置 a,b 两个指针,起始都指向头结点,然后让 a 指针先遍历 k-1 个结点,然后 a 和 b 同时遍历链表,当 a 遍历完链表时, b 指向的就是倒数第k个结点。

public class E3 {
    static class Node {
        int data;
        Node next;
    }

    /**
     * 尾插法获得一个带头结点的单链表
     * @return
     */
    private static Node createLink() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入结点个数");
        int n = scanner.nextInt();
        Node head = new Node();
        head.next = null;
        Node rear = head;
        while (n-- > 0) {
            Node node = new Node();
            node.data = scanner.nextInt();
            node.next = null;
            rear.next = node;
            rear = node;
        }
        return head;
    }

    /**
     * 在单链表中查找倒数第k个结点
     * @param k
     * @return
     */
    private static int getKNode(Node l, int k) {
        //此时a,b均在头结点的位置
        Node a = l;
        Node b = l;
        for (int i = 0; i < k - 1; i++) {
            if (a != null) {
                a = a.next;
            }
            else {
                throw new RuntimeException("K是一个非法值");
            }
        }
        while (a.next != null) {
            a = a.next;
            b = b.next;
        }
        return b.data;
    }

    public static void main(String[] args) {
//创建长度为5的链表
        Node link = createLink();
        int value = getKNode(link, 3);
        System.out.println(value);
    }
}

=========
结果
请输入结点个数
5
---------------
1
2
3
4
5
----------------
3

相关文章

  • JZ-014-链表中倒数第 K 个结点

    链表中倒数第 K 个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点。题目链接: 链表中倒数第 K 个结点...

  • 数据结构-单链表学习目录

    1.单链表的基本操作 2.求单链表的长度 3.判断单链表是否为空 4.查找单链表中倒数第K个结点 5.单链表的反转...

  • 《剑指offer》(十四)-链表中倒数第K个结点(java)

    链表中倒数第K个结点 考点:链表 题目描述 输入一个链表,输出该链表中倒数第K个结点 代码格式 解题一-直接输出结...

  • 链表中倒数第k个节点

    《剑指offer》面试题22:代码中倒数第k个节点 题目:输入一个单链表,输出该链表中倒数第k个结点。 思路:定义...

  • 链表中倒数第k个结点

    题目来源:牛客网--链表中倒数第k个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点。 解题思路 整体思路...

  • 剑指offer(十四)链表中倒数第k个结点

    [点击进入 牛客网题库:链表中倒数第k个结点] 题目描述输入一个链表,输出该链表中倒数第k个结点。 这个题目就是通...

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

    题目描述 输入一个链表,输出该链表中倒数第 k 个结点。 思路 假如结点数是 n,倒数第 k 个结点也就是正数第 ...

  • 链表

    1判断一个单链表是否有环 2判断一个单链表中环的入口 3在链表的第k个位置插入一个结点 4找到链表中的倒数第k个位...

  • 在单链表中查找倒数第k个结点

    在单链表中如何获得倒数第K个结点,最直接的方式,设置一个计数器,遍历完整个链表,获得链表的长度,然后计算获得倒数第...

  • 单向链表算法

    单向链表 反转单向链表 单链表查找倒数第k个节点 单链表递归倒序打印 单链表排序 单链表删除重复节点

网友评论

      本文标题:在单链表中查找倒数第k个结点

      本文链接:https://www.haomeiwen.com/subject/oljqphtx.html