码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode.876. Middle of the Linked List

时间:2019-01-06 10:42:53      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:运行   ret   tno   leetcode   种类   加油   ext   etc   获取   

题目的大意为找寻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

标签:运行   ret   tno   leetcode   种类   加油   ext   etc   获取   

原文地址:https://www.cnblogs.com/xusong95/p/10226956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!