LeetCode(876.链表的中间结点)

题目链接:

https://leetcode-cn.com/problems/middle-of-the-linked-list/

方法一:

    /**
     *
     * 1.统计节点数量
     * 2.根据数量得到中间节点位置,然后循环得到它
     *
     * @param head
     * @return
     */
    public ListNode middleNode1(ListNode head) {
        int num = 0;
        ListNode p = head;
        while(p != null){
            num++;
            p = p.next;
        }
        for(int i = 0; i < num/2;i++){
            head = head.next;
        }
        return head;
    }

方法二:

    /**
     * 快慢指针
     *
     * 快指针一次走两步,慢指针一次走一步,快指针走到末尾时,慢指针所指的就是中间节点
     * @param head
     * @return
     */
    public ListNode middleNode2(ListNode head) {
        ListNode low = head;
        ListNode fast = head;

        while(fast != null && fast.next != null){
            fast = fast.next.next;
            low = low.next;
        }

        return low;
    }

你可能感兴趣的:(Java算法学习,链表,leetcode,数据结构)