leetcode 143. Reorder List ----- java

來源:互聯網
上載者:User

標籤:額外   null   slow   code   部分   ini   example   last   fas   

Given a singly linked list LL0→L1→…→Ln-1→Ln,
reorder it to: L0→LnL1→Ln-1→L2→Ln-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}.

 

按照題意改變鏈表結構。

 

1、使用list記錄鏈表。

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public void reorderList(ListNode head) {                List<ListNode> list = new ArrayList<ListNode>();        ListNode node = head;        while( node != null ){            list.add(node);            node = node.next;        }        int len = list.size();        if( len < 3)            return ;        node = head;        node.next = list.get(len-1);        node = node.next;        for( int i = 1;i<len/2;i++){            node.next = list.get(i);            node.next.next = list.get(len-1-i);            node = node.next.next;        }        if( len%2 != 0){            node.next = list.get(len/2);            node = node.next;        }        node.next = null;        return ;    }}

 

2、使用雙向隊列。

 

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public void reorderList(ListNode head) {                Deque<ListNode> deque = new ArrayDeque<ListNode>();        ListNode node = head;        while( node != null ){            deque.add( node );            node = node.next;        }        if( deque.size() < 3)            return ;        node = deque.poll();        node.next = deque.pollLast();        node = node.next;        while( !deque.isEmpty() ){            node.next = deque.poll();            node.next.next = deque.pollLast();            node = node.next.next;        }        if( node != null )            node.next = null;        return ;    }}

 

 

3、不使用額外空間,找到中間點,然後將後半部分鏈表反轉,然後將兩個鏈表合并即可。

 

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public void reorderList(ListNode head) {                        if( head == null || head.next == null || head.next.next == null )            return ;        ListNode slow = head;        ListNode fast = head.next;        while( fast!= null && fast.next != null){            fast = fast.next.next;            slow = slow.next;        }                ListNode node2 = slow;        fast = slow.next;                while( fast != null ){                        ListNode node = fast.next;            fast.next = slow;            slow = fast;            fast = node;                    }        node2.next = null;        node2 = slow;        ListNode node1 = head;                while( node1 != null   ){            ListNode node = node1.next;            ListNode nn = node2.next;            node1.next = node2;            node2.next = node;            node1 = node;            node2 = nn;        }                        return ;    }}

 

leetcode 143. Reorder List ----- java

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.