此题目对应于86. Partition List
题目要求基于一个给定的值x对链表做一个划分partition,使得小于x的放在前,大于等于x的放在后,两部分各自保持原有顺序。
解题思路很简单:
1.设置两个链表,一个存放小于x的元素,一个存放大于等于x的元素
2.合并两个链表,这里需要注意的是需要对第二个辅助链表的表尾进行制空,以防止出现从头到尾的循环链表。
下面附上python代码:
# -*- coding: utf-8 -*-
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
#给个list,给个值,把list分为两部分,小于x的放在前,大于等于x的放在后,两部分各自保持原有顺序
def partition(self, head, x):
if not head or not head.next:
return head
pre1 = ListNode(0)
cur1 = pre1
pre2 = ListNode(0)
cur2 = pre2
while head:
if head.val < x:
cur1.next = head
cur1 = cur1.next
else:
cur2.next = head
cur2 = cur2.next
head = head.next
cur1.next = pre2.next
cur2.next = None#需要制空否则会形成从头到尾的一致循环的list
return pre1.next
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""