注册账号 登录
一亩三分地 返回首页

Artemis的个人空间

日志

Reorder List (Linked List)

已有 1229 次阅读2015-7-9 04:34 |个人分类:LeetCode-Medium

题目:

Given a singly linked list LL0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-2→…

You must do this in-place without altering the nodes' values.

For example,
Given {1,2,3,4}, reorder it to {1,4,2,3}.


--
解法:
public void reorderList(ListNode head) {
        if (head == null || head.next == null || head.next.next == null) return;
        ListNode pointerAhead = head;
        ListNode pointerAfter = head;
        ArrayList<ListNode> leftNodes = new ArrayList<ListNode>();
        ArrayList<ListNode> rightNodes = new ArrayList<ListNode>();
        leftNodes.add(head);

        while (pointerAhead.next != null && pointerAhead.next.next != null) {
            pointerAhead = pointerAhead.next.next;
            pointerAfter = pointerAfter.next;
            leftNodes.add(new ListNode(pointerAfter.val));
        }
        while (pointerAfter.next != null) {
            pointerAfter = pointerAfter.next;
            rightNodes.add(new ListNode(pointerAfter.val));
        }
        
        ListNode dummyHead = new ListNode(0);
        ListNode pointer = dummyHead;
        while (rightNodes.size() != 0) {
            pointer.next = leftNodes.remove(0);
            pointer = pointer.next;
            pointer.next = rightNodes.remove(rightNodes.size()-1);
            pointer = pointer.next;
        }
        if (leftNodes.size() == 1) pointer.next = leftNodes.remove(0);
        return;
    }

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册账号

Advertisement
>
返回顶部