首页 > 其他 > 详细

LeetCode 876. 链表的中间结点

时间:2020-05-01 18:30:38      阅读:61      评论:0      收藏:0      [点我收藏+]
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. 链表的中间结点

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!