You are given the head of a singly linked-list. The list can be represented as:
L0 → L1 → … → Ln - 1 → Ln
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
You may not modify the values in the list's nodes. Only nodes themselves may be changed.
Input: head = [1,2,3,4]
Output:
[1,4,2,3]
Input: head = [1,2,3,4,5]
Output:
[1,5,2,4,3]
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reorderList(head *ListNode) {
fast, slow, prev := head, head, head
stack := make([]*ListNode, 0)
for fast!= nil && fast.Next != nil {
fast = fast.Next.Next
prev = slow
slow = slow.Next
}
for slow != nil {
stack = append(stack, slow)
slow = slow.Next
}
prev.Next = nil
h := head
for h!= nil && len(stack) > 0 {
temp := h.Next
h.Next = stack[len(stack) - 1]
stack[len(stack) - 1].Next = temp
h = temp
if h == nil {
h = stack[len(stack) - 1]
}
stack = stack[:len(stack) - 1]
}
}