###143. Reorder List

题目:

<https://leetcode.com/problems/reorder-list/>


难度:

Medium

超时


```

class Solution(object):
    def reorderList(self, head):
        """
        :type head: ListNode
        :rtype: void Do not return anything, modify head in-place instead.
        """
        head = self.reorder(head)

        
    def reorder(self, head):
        if head == None or head.next == None or head.next.next == None:
            return head
    
        l0 = head
        l1 = head.next
        ln_1 = self.oneNodeTail(head)
        ln =ln_1.next
    
        l0.next = ln
        ln_1.next = None
        ln.next = self.reorder(l1)
        return l0
        

    def oneNodeTail(self, head):
        if head == None or head.next == None or head.next.next == None:
            return head
        cur = head 
        while cur.next:
            if cur.next.next:
                cur = cur.next
            else:
                break
        return cur
                
```


取巧的办法是：

找到中间节点，断开，把后半截linked list reverse，然后合并 √

看了AC指南

```
class Solution(object):
    def reorderList(self, head):
        """
        :type head: ListNode
        :rtype: void Do not return anything, modify head in-place instead.
        """
        if head == None or head.next == None or head.next.next == None:
            return
        
        slow = head
        fast = head
        prev = None
        
        while fast and fast.next:
            prev = slow
            slow = slow.next
            fast = fast.next.next
            
        prev.next = None


        slow = self.reverseList(slow)
        
        cur = head
        while cur.next:
            tmp = cur.next
            cur.next = slow
            slow = slow.next
            cur.next.next = tmp
            cur = tmp
        cur.next = slow
            
        
    
    def reverseList(self,head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        prev = None 
        cur = head
        while(cur):
            nxt = cur.next
            cur.next = prev
            prev = cur
            cur = nxt
        return prev
        
        
```

