86. 分隔链表

86. 分隔链表

题意

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。并且需要保留两个分区中每个节点的初始相对位置。

解题思路

  • 用两个数组分别把小于和大于的都保存下来,然后依照顺序来创建链表;

  • 在原来的链表的基础上操作;

  • 创建新的结点;

实现

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
   def partition(self, head, x):
       """
      :type head: ListNode
      :type x: int
      :rtype: ListNode
      """
       if not head:
           return None
       
       small, big = [], []
       node = head
       while node:
           if node.val < x:
               small.append(node.val)
           else:
               big.append(node.val)
           node = node.next
       
       new_link = ListNode(0)
       node = new_link
       
       for n in small:
           node.next = ListNode(n)
           node = node.next
       
       for n in big:
           node.next = ListNode(n)
           node = node.next
       
       return new_link.next

   def partition(self, head, x):
       """
      :type head: ListNode
      :type x: int
      :rtype: ListNode
      """
       # h1为小,h2为大
       h1, h2 = ListNode(0), ListNode(0)
       h2.next = head
       p1, p2 = h1, h2

       while p2 and p2.next:
           if p2.next.val < x:
               p1.next = p2.next
               p1 = p1.next
               p2.next = p2.next.next # 删除
           else:
               p2 = p2.next
       # 剩下的都是比x大的
       p1.next = h2.next
       return h1.next

def partition(self, head, x):
       """
      :type head: ListNode
      :type x: int
      :rtype: ListNode
      """
       # h1为小,h2为大
       h1, h2 = ListNode(0), ListNode(0)
       p1, p2 = h1, h2

       while head:
           if head.val < x:
               p1.next = ListNode(head.val)
               p1 = p1.next
           else:
               p2.next = ListNode(head.val)
               p2 = p2.next
           head = head.next
       
       p1.next = h2.next
       return h1.next
posted @ 2017-09-11 22:28  banananana  阅读(111)  评论(0编辑  收藏  举报