LeetCode.876. Middle of the Linked List

Posted xusong95

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode.876. Middle of the Linked List相关的知识,希望对你有一定的参考价值。

题目的大意为找寻LinkedList的中间节点,如果有两个中间节点,返回第二个中间节点。

比如:

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

或者:

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

拿到这道题,我首先想到先获取链表长度,再取中间值,去查询节点。

代码实现为:

public ListNode middleNode(ListNode head) {

        int length = 1;
        ListNode temp = head;
        while (temp.next != null) {
            length++;
            temp = temp.next;
        }

        int middle = length / 2;
        for (int i = 0; i <= middle; i++) {
            if (i == middle) {
                return head;
            }
            head = head.next;
        }
        return null;
}

运行通过后,查询其他大神们提交的代码,发现还有一种结题方式比较好:

    public ListNode middleNode(ListNode head) {

        ListNode fast  = head,slow = head;
        while(fast!=null&& fast.next !=null){
            fast = fast.next.next;
            slow = slow.next;
        }
        return slow;
    }

一种类似于龟兔赛跑的方式,fast节点每次走两步,slow节点每次走一步,当fast节点走到终点的时候,slow节点正好走一半,真是妙,学习了。

希望有一天我也能成为大神,加油。

以上是关于LeetCode.876. Middle of the Linked List的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 876. Middle of the Linked List

[LeetCode] 876. Middle of the Linked List

LeetCode 876 Middle of the Linked List 解题报告

LeetCode.876. Middle of the Linked List

LeetCode 876. Middle of the Linked List(获得链表中心结点)

[LeetCode] 876. Middle of the Linked List_Easy tag: Linked List