classSolution{//返回反转后链表的头结点ListNodereverseList(ListNode head){ListNode pre =null, now = head;while(null!= now){ListNode next = now.next;
now.next = pre;
pre = now;
now = next;}return pre;}publicvoidreorderList(ListNode head){ListNode fast = head, slow = head;while(null!= fast.next){
fast = fast.next;
slow = slow.next;if(null!= fast.next)
fast = fast.next;}ListNode left = head, right =reverseList(slow.next);
slow.next =null;while(null!= left &&null!= right){ListNode leftNext = left.next, rightNext = right.next;
left.next = right;
right.next = leftNext;
left = leftNext;
right = rightNext;}}}
Go代码
funcreverseList(head *ListNode)*ListNode {ifnil== head ||nil== head.Next {return head
}var pre *ListNode
now := head
for now !=nil{
next := now.Next
now.Next = pre
pre = now
now = next
}return pre
}funcreorderList(head *ListNode){if head.Next ==nil|| head.Next.Next ==nil{return}
fast, slow := head.Next.Next, head
for fast !=nil&& fast.Next !=nil{
slow = slow.Next
fast = fast.Next.Next
}
head1, head2 := head,reverseList(slow.Next)
slow.Next =nilfor head1.Next !=nil&& head2.Next !=nil{
next := head1.Next
head1.Next = head2
head1 = next
next = head2.Next
head2.Next = head1
head2 = next
}if head1.Next ==nil{
head1.Next = head2
}}