我尝试练习问题partition list
给出一个链表和一个值x,对它进行分区,以使所有小于x的节点排在大于或等于x的节点之前。 输入:head = 1-> 4-> 3-> 2-> 5-> 2,x = 3 输出:1-> 2-> 2-> 4-> 3-> 5
我的想法是循环遍历每个节点,并过滤出任何等于或等于x的值,然后构建一个新的LinkedList并从原始列表中删除该节点。一旦完成。将新的LinkedList链接到原始列表的末尾并返回。我的代码在大多数情况下都通过了,但是在
上失败了输入:head = 2-> 1,x = 2 输出:1-> 2
我认为原因是因为在这种情况下我无法删除第一个节点,但是由于我也有prev.next = cur.next,因此我不确定为什么。知道为什么吗?
class Solution(object):
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
dummy = node = ListNode(0)
cur, prev = Head, ListNode(0)
while cur:
if cur.val >= x:
node.next = ListNode(cur.val)
node = node.next
prev.next = cur.next
cur = None
else:
prev = cur
cur = cur.next
if dummy.next:
prev.next = dummy.next
return prev.next