Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→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}
LeetCode: https://oj.leetcode.com/problems/reorder-list/
题解:本题要求对一个链表进行重新链接,可以通过将节点保存在一个堆栈和队列中的方法类操作;但Java基础类库里面提供Deque(双向链表实现),所以我们可以通过以下方式实现:
public class Solution {
public void reorderList(ListNode head) {
if(head == null || head.next == null)
return ;
Deque deque = new LinkedList<ListNode>();
ListNode current = head;
while(current != null){
deque.addLast(current);
current = current.next;
}
ListNode result = new ListNode(0);
while(!deque.isEmpty()){
result.next = (ListNode) deque.pollFirst();
result = result.next;
if(!deque.isEmpty()){
result.next = (ListNode) deque.pollLast();
result = result.next;
}
}
result.next = null;
}
}