Golang | Leetcode Golang题解之第143题重排链表
题目:
题解:
func middleNode(head *ListNode) *ListNode {
slow, fast := head, head
for fast.Next != nil && fast.Next.Next != nil {
slow = slow.Next
fast = fast.Next.Next
}
return slow
}
func reverseList(head *ListNode) *ListNode {
var prev, cur *ListNode = nil, head
for cur != nil {
nextTmp := cur.Next
cur.Next = prev
prev = cur
cur = nextTmp
}
return prev
}
func mergeList(l1, l2 *ListNode) {
var l1Tmp, l2Tmp *ListNode
for l1 != nil && l2 != nil {
l1Tmp = l1.Next
l2Tmp = l2.Next
l1.Next = l2
l1 = l1Tmp
l2.Next = l1
l2 = l2Tmp
}
}
func reorderList(head *ListNode) {
if head == nil {
return
}
mid := middleNode(head)
l1 := head
l2 := mid.Next
mid.Next = nil
l2 = reverseList(l2)
mergeList(l1, l2)
}