Thursday, September 18, 2014

Leetcode: Reorder List @Python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # @param head, a ListNode
    # @return nothing
    def reorderList(self, head):
        if not head or not head.next: return head
        #find the middle node
        slow=fast=ListNode(0)
        slow.next=head
        n=0#length of the rear half of the linked list
        while fast and fast.next:
            n+=1
            slow=slow.next
            fast=fast.next.next
        if not fast:
            n=n-1
        mid=slow
        rear=mid.next
        mid.next=None
        dummy=ListNode(0)
        for i in range(n):
            temp=dummy.next
            dummy.next=rear
            rear=rear.next
            dummy.next.next=temp
        crt=head
        insert_node=dummy.next
        for i in reversed(range(n)):
            temp=crt.next
            crt.next=insert_node
            insert_node=insert_node.next
            crt.next.next=temp
            crt=temp
        return head

No comments :

Post a Comment