86. Partition List



 

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

 

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
        afake = ListNode()
        bfake = ListNode()
        a1 = afake
        a2 = bfake
        cur = head
        while cur:
            c_next = cur.next
            cur.next = None
            if cur.val < x:
                a1.next = cur
                a1 = a1.next
            else:
                a2.next = cur
                a2 = a2.next
            cur = c_next
    
        a1.next = bfake.next
        return afake.next

 

 

posted @ 2017-10-25 09:36  乐乐章  阅读(142)  评论(0编辑  收藏  举报