LeetCode 876. 链表的中间结点

Posted jianzha

tags:

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

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. 链表的中间结点的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript 刷题] 链表 - 链表的中间结点, leetcode 876

LeetCode876. 链表的中间结点

LeetCode876 链表的中间结点

LeetCode 876——链表的中间结点

leetcode 876. 链表的中间结点

LeetCode Java刷题笔记—876. 链表的中间结点