leetcode第86题,分割链表,将小于指定数字的部分和大于等于指定数字的部分放在链表两边。
这个题难度不大,很简单的考虑思路就是遍历整个链表,凡是小于指定数字的加入一个新的链表中,其余的加入另一个链表中,最后合并两个链表就可以了。
这里要注意两种极端情况。一是如果整个链表都大于指定数字,一个是整个链表都小于指定数字。
# 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
"""
node = head
p1 = 0;p2 = 0
lessNode = None
moreNode = None
lessHead = None
moreHead = None
while node != None:
if node.val < x:
if p1 == 0:
lessNode = ListNode(node.val)
lessHead = lessNode
else:
lessNode.next = ListNode(node.val)
lessNode = lessNode.next
p1 += 1
else:
if p2 == 0:
moreNode = ListNode(node.val)
moreHead = moreNode
else:
moreNode.next = ListNode(node.val)
moreNode = moreNode.next
p2 += 1
node = node.next
if lessNode == None:
return moreHead
else:
lessNode.next = moreHead
return lessHead