数据结构与算法

链表--求链表的中间结点

2019-12-17  本文已影响0人  暮想sun

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。

输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])


    public static void main(String[] args) {
        LinkedNode linkedNode5 = new LinkedNode(1);
        LinkedNode linkedNode4 = new LinkedNode(2, linkedNode5);
        LinkedNode linkedNode3 = new LinkedNode(3, linkedNode4);
        LinkedNode linkedNode1 = new LinkedNode(5, linkedNode3);

        LinkedNode linkedNode = middleNode(linkedNode1);

        while (linkedNode != null) {
            System.out.println(linkedNode.item);
            linkedNode = linkedNode.next;
        }
    }

    public static LinkedNode middleNode(LinkedNode linkedNode) {

        LinkedNode p1 = linkedNode;
        LinkedNode p2 = linkedNode;

        //p2向后走两步,p1走一步,p2为空的时候,p1是在正中间,偶数的话为正中间下一位
        while (p2 != null && p2.next != null) {
            p2 = p2.next.next;
            p1 = p1.next;
        }

        return p1;

    }

    private static class LinkedNode {

        private int item;

        private LinkedNode next;

        public LinkedNode(int item) {
            this.item = item;
        }

        public LinkedNode(int item, LinkedNode next) {
            this.item = item;
            this.next = next;
        }
    }
上一篇下一篇

猜你喜欢

热点阅读