重排链表
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
给定链表 1->2->3->4, 重新排列为 1->4->2->3.
示例 2:
给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.
1 public class Solution{ 2 public void reorderList(ListNode head){ 3 if(head==null) return; 4 ListNode slow=head,fast=head; 5 while(fast!=null && fast.next!=null){ 6 slow=slow.next; 7 fast=fast.next.next; 8 } 9 Stack<ListNode> stack=new Stack<>(); 10 ListNode half=slow.next; 11 while(half!=null){ 12 stack.push(half); 13 half=half.next; 14 } 15 slow.next=null; 16 ListNode current=head; 17 while(current!=null && !stack.isEmpty()){ 18 ListNode next=current.next; 19 current.next=stack.pop(); 20 current.next.next=next; 21 current=next; 22 } 23 } 24 }