思路:找栈的中心位置,然后将后半部分全部送入栈中,然后一前一后挨个对接即可。
class Solution {
public void reorderList(ListNode head) {
ListNode _head = head;
Deque<ListNode> stack = new ArrayDeque<>();
int len = 0;
while(_head != null){
len++;
stack.push(_head);
_head = _head.next;
}//注意,不用找这个所谓的中间的
//只要出栈的元素和正序的元素重合 即可停止。
if(len < 3) return ;
_head = head;
ListNode node1 = head;
ListNode node2 = head.next;
while(node2.next != node1){
_head = stack.pop();
node1.next = _head;
_head.next = node2;
node1 = node2;
node2 = node2.next;
}
node1.next = null;
}
}