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.
Example:
Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5
直接新建两个链表就可以,将<x和>=x的ListNode分别放到两个链表里,最后再将两个链表连接到一起。
我这里开始犯的一个错误就是dummy2链表的最后,也就是p2.next没有设置为None。
[1,4,3,2,5,2] 3
比如这个例子,如果没有设置为None的话,p2最后一个点本应是5,但他后面还会连着2.也就是:
ListNode{val: 5, next: ListNode{val: 2, next: None}} 没有设置为=None
ListNode{val: 5, next: None} 设置为=None
# 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
"""
dummy1 = p1 = ListNode(0)
dummy2 = p2 = ListNode(0)
while head:
if head.val < x:
p1.next=head
p1=p1.next
else:
p2.next=head
p2=p2.next
head=head.next
p2.next = None
p1.next = dummy2.next
return dummy1.next