美文网首页数据结构与算法
链表--求链表的中间结点

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

作者: 暮想sun | 来源:发表于2019-12-17 22:06 被阅读0次

    给定一个带有头结点 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;
            }
        }
    

    相关文章

      网友评论

        本文标题:链表--求链表的中间结点

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