| 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)
 
- // }
 
 
  |