我找不到简化此代码的方法
def mergeLists(head1, head2):
tempNode = returnNode = SinglyLinkedListNode(None)
while head1 is not None or head2 is not None:
if head2 is None:
tempNode.next = head1
head1 = head1.next
elif head1 is None:
tempNode.next = head2
head2 = head2.next
elif head1.data <= head2.data:
tempNode.next = head1
head1 = head1.next
else:
tempNode.next = head2
head2 = head2.next
tempNode = tempNode.next
return returnNode.next
最初我写了一个if语句和一个else语句,if语句是:
if head2 is None or head1.data <= head2.data:
这给了我一个比较Nonetype的问题。我想虽然这个版本可以工作,但应该有一个方法来简化它,有人能在这方面帮助我吗?
1条答案
按热度按时间dsekswqp1#
只要两个列表引用中的一个是
None
,就退出循环,这样可以保存一些代码(和运行时间)。1.您不必在循环体内部测试这些列表引用中是否有一个是
None
,因为可以确保None
也不是。1.在循环之后,你可以通过设置
next
对剩余列表的引用来追加剩余的列表节点,因为该列表已经正确地连接了它的剩余节点,所以不需要迭代这些节点。1.你可以删除一些重复的代码,并使用一个值为0或1的 index 来确定哪个列表的值最小,表示它是两个列表中的哪一个。它可以是一个布尔表达式,表示第二个数据是否小于第一个。如果你在一个两个列表中也有两个列表引用,那么你可以用一种通用的方式来处理循环体的逻辑。
1.这并不是要减少代码,但是我会使用名称
tail
来表示当前已合并部分的尾节点,这比tempNode
更具描述性,而且returnNode
并不是它所表示的那样,因为实际上您返回的是之后的节点,所以我建议使用名称beforeHead