我正在尝试解决CTCI书中的链接列表分区的问题,当我查看here中的python解决方案时,不确定是否完全理解这里的行为。
def partition(head, pivot):
a_head, a_tail = None, None
b_head, b_tail = None, None
node = head
while node:
if node.data < pivot:
if a_head:
a_tail.next, a_tail = node, node
else:
a_head, a_tail = node, node
else:
if b_head:
b_tail.next, b_tail = node, node
else:
b_head, b_tail = node, node
node = node.next
a_tail.next = b_head
return a_head
class Node():
def __init__(self, data, next=None):
self.data, self.next = data, next
def __str__(self):
string = str(self.data)
if self.next:
string += ',' + str(self.next)
return string
class Test(unittest.TestCase):
def test_partition(self):
head1 =
Node(7,Node(2,Node(9,Node(1,Node(6,Node(3,Node(8)))))))
head2 = partition(head1, 6)
self.assertEqual(str(head2), "2,1,3,7,9,6,8")
head3 = partition(head2, 7)
self.assertEqual(str(head3), "2,1,3,6,7,9,8")
if __name__ == "__main__":
unittest.main()
如果return a_head
的值是node
时,在else
语句的第一次命中只分配了None
值,为什么最后要a_head
呢?我在整个过程中打印了a_tail.next = head
的值,当a_tail.next = head
时似乎改变了值。
我不明白为什么会这样。我假设设置a_tail
仅适用于a_head
,所以不确定为什么它也会更改curl -o /dev/null -s -w "%{http_code}\n" http://localhost:8080/api/health
的值。
答案 0 :(得分:1)
之后
a_head, a_tail = node, node
a_head
和a_tail
都是对同一对象的引用。所以以后,当您这样做
a_tail.next, a_tail = node, node
这也是第一次设置a_head.next
,因为此时a_head
和a_tail
是同一对象。