0323-2020-LEETCODE-876-链表的中间节点-(list存或者快慢指针)

就像寻找倒数第K个元素一样,使用快慢指针就可以实现一次遍历,倒数第K个是:慢指针直到快指针走了K步之后再走,直到快指针走到链表的末尾,慢指针也就走到了倒数第K个。
这个也是一样,相当于折半,那么满指针就一个一个走,快指针就两步两步走,知道快指针正好走到链表末尾或者走到链表的末尾的下一个指针null,这个终止条件很重要。
比较普通的想法是自己想的创建一个list容器,直接依次加入最后返回list大小的一半即可。

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