| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | package main/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func reorderListOld(head *ListNode) {	// Given a singly linked list L: L0→L1→…→Ln-1→Ln,	// reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…	if head == nil || head.Next == nil {		return	}	stack := make([]*ListNode, 0)	beg := head	length := 0	for beg != nil {		stack = append(stack, beg)		beg = beg.Next		length++	}	beg = head	for i := 0; i < length/2; i++ {		tmp := beg.Next		beg.Next = stack[length-i-1]		beg.Next.Next = tmp		beg = tmp	}	beg.Next = nil}func reorderList(head *ListNode) {	if head == nil || head.Next == nil {		return	}	slow, fast := head, head	for fast != nil && fast.Next != nil {		// Find the middle of list		slow = slow.Next		fast = fast.Next.Next	}	// Reverse the 2nd part	var prev *ListNode	for slow.Next != nil {		tmp := slow.Next		slow.Next = prev		prev = slow		slow = tmp	}	slow.Next = prev	// Merge the 1st part and the 2nd part	left, right := head, slow	for left != nil && right.Next != nil {		tmpL, tmpR := left.Next, right.Next		left.Next = right		right.Next = tmpL		left, right = tmpL, tmpR	}}// func main() {// 	n5 := ListNode{5, nil}// 	n4 := ListNode{4, &n5}// 	// n4 := ListNode{4, nil}// 	n3 := ListNode{3, &n4}// 	n2 := ListNode{2, &n3}// 	n1 := ListNode{1, &n2}// 	printList(&n1)// 	reorderList(&n1)// 	printList(&n1)// }
 |