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

LeetCode 876. 链表的中间结点

时间:2020-05-01 18:22:25      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:依次   ack   lse   访问   一个   ddl   problem   problems   node   

package 链表;

/**
 * https://leetcode-cn.com/problems/middle-of-the-linked-list/
 * 876. 链表的中间结点
 *
 */
public class _876_Middle_of_the_Linked_List {

    class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
            next = null;
        }
    }


    /**
     * 官方题解
     * 我们可以对链表进行两次遍历。第一次遍历时,我们统计链表中的元素个数 N;第二次遍历时,我们遍历到第 N/2 个元素(链表的首节点为第 0 个元素)时,将该元素返回即可。
     */
    class Solution {
        public ListNode middleNode(ListNode head) {
            ListNode curr = head;
            int n = 0;
            while (curr != null) {
                ++n;
                curr = curr.next;
            }
            int k = 0;
            curr = head;
            while (k < n / 2) {
                ++k;
                curr = curr.next;
            }
            return curr;
        }
    }



    /**
     * 思路:采用快慢指针,刚开始都位于链表的第 1 个结点,一个永远一次只走 1 步,一个永远一次只走 2 步
     */
    /*class Solution {
        public ListNode middleNode(ListNode head) {
            // 快指针
            ListNode fast = head;
            // 慢指针
            ListNode slow = head;

            while (fast.next != null) {
                slow = slow.next;
                if (fast.next.next != null) {
                    fast = fast.next.next;
                } else {
                    fast = fast.next;
                }
            }
            return slow;
        }
    }*/



    /**
     * 官方题解
     * 思路:链表的缺点在于不能通过下标访问对应的元素。因此我们可以考虑对链表进行遍历,同时将遍历到的元素依次放入数组 A 中。
     * 如果我们遍历到了 N 个元素,那么链表以及数组的长度也为 N,对应的中间节点即为 A[N/2]。
     */
    /*public class Solution {
        public ListNode middleNode(ListNode head) {
            ListNode[] A = new ListNode[100];
            int t = 0;
            while (head != null) {
                A[t++] = head;
                head = head.next;
            }
            return A[t / 2];
        }
    }*/
}

LeetCode 876. 链表的中间结点

标签:依次   ack   lse   访问   一个   ddl   problem   problems   node   

原文地址:https://www.cnblogs.com/jianzha/p/12814011.html

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