0323-2020-LEETCODE-876-リストの中間ノード - (リストまたは高速メモリポインタ)

スローポインタのポインタをすばやくリストの最後に来るまで、ポインタがKステップ後の速い散歩に行くまでは、遅すぎるポインター:ちょうどポインタの速度を使用して、最後から二番目のK要素として見て横断後、Kの最後から二番目が達成することができますKは最後から二番目のいずれかに行ってきました。
これと同じ、同等のバイナリで徒歩でフルポインタ、二段階の二段階の迅速ポインタ、ポインタだけですぐにリストの最後に来るか、リストの末尾に次のヌル・ポインタに行く知っている、そして、終了条件が非常に重要です。
より一般的なアイデアは、彼らがコンテナのリストを作成したいです、直接リストの半分のサイズを返すために最後を添加しました。

public ListNode middleNode(ListNode head) {
        if (head == null){
            return null;
        }
        int count = 0;
        ArrayList<ListNode> list = new ArrayList<>();
        while (head != null){
            list.add(head);
            head = head.next;
            count++;
        }
        //int index = count % 2 == 0 ? count / 2 + 1 : count / 2;
        return list.get(count / 2);
    }
    public ListNode middleNode1(ListNode head) {
        if (head == null){
            return null;
        }
        ListNode slow = head;
        ListNode fast = head;
        while (fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }

    public void print(ListNode head){
        while (head != null){
            System.out.print(head.val + " ");
            head = head.next;
        }
    }
公開された98元の記事 ウォンの賞賛0 ビュー2186

おすすめ

転載: blog.csdn.net/weixin_43221993/article/details/105042246