【发布时间】:2016-05-19 07:33:01
【问题描述】:
我正在尝试解决一个面试问题,使得给定的链表需要围绕一个值“x”进行分区。我尝试了一下,但没有得到想要的结果。
class Node(object):
def __init__(self, val):
self.val = val
self.next = None
def Partition(head, x):
x_node = Node(x)
x_node.next = head
current = head
last = x_node
while current:
if current.val < x_node.val:
last = last.next
temp_val = current.val
current.val = last.val
last.val = temp_val
current = current.next
temp_val = last.val
last.val = x_node.val
x_node.val = temp_val
Partition(head,3)
Input: 1->4->3->2->5->2
Actual Output: 1->2->3->4->5->3
Expected Output: 1->2->2->3->4->5
提前致谢。
【问题讨论】:
-
这实际上应该排序,还是只是分区?因为我认为预期的输出没有理由将 3 放在 4 之前。
-
另外,这段代码是在交换值,而不是节点,这可能违反了练习的精神;在 Python 中,当然,交换单个值和节点引用是等价的成本,但链表的全部意义在于您可以重新排列节点而无需更改节点链接以外的任何内容。
-
@ShahdowRanger 分区。另外,您能否举例说明您的第二条评论。谢谢!
标签: python algorithm linked-list