如何格式化输出语句实现Python链表的正确打印顺序?
问题原因
你的核心问题出在printList()方法的设计上:这个方法是直接打印链表内容,而非返回拼接好的字符串。当你把self.printList()放到print()函数里当参数时,Python会先执行printList()(此时直接输出链表内容),但因为printList()没有return语句,默认返回None,所以就会出现你看到的“Original Linked List: None”结果。
另外你写的print('Original Linked List:' self.printList())还存在语法错误——字符串和变量之间少了逗号,不过这不是主要问题。
解决方案
有两种简单的修复方式,任选其一即可:
方式1:修改printList()返回字符串
把printList()改成生成并返回链表内容的字符串,这样就能在print()里正常拼接使用:
class UnorderedList: # 其他方法保持不变 def printList(self): temp = self.head data_strings = [] while temp: data_strings.append(str(temp.data)) temp = temp.next # 将所有元素拼接为空格分隔的字符串 return ' '.join(data_strings) def pop(self): # 用f-string拼接前缀和链表内容 print(f'Original Linked List: {self.printList()}') current = self.head previous = None while current.getNext() != None: previous = current current = current.getNext() previous.setNext(current.getNext()) print(f'New linked list after pop is: {self.printList()}')
方式2:分开打印前缀和链表
如果不想改动printList()的原有功能,那就先打印前缀(不换行),再调用printList()打印链表:
class UnorderedList: # 调整printList,移除多余的换行,避免输出空行 def printList(self): temp = self.head while temp: print(temp.data, end=" ") temp = temp.next # 去掉原有的print('\n'),让前缀和内容在同一行输出 def pop(self): # 打印前缀,用end=' '让后续内容接在同一行 print('Original Linked List:', end=' ') self.printList() # 手动换行分隔 print() current = self.head previous = None while current.getNext() != None: previous = current current = current.getNext() previous.setNext(current.getNext()) print('New linked list after pop is:', end=' ') self.printList() print()
额外提醒
注意处理链表为空或仅含单个元素的情况,比如当链表只有一个元素时,pop()里的previous会是None,调用previous.setNext()会报错,可以添加判断修复:
def pop(self): if self.isEmpty(): return None # 空链表无法执行pop操作 current = self.head previous = None while current.getNext() != None: previous = current current = current.getNext() if previous is None: # 链表只有一个元素,直接将head置为None self.head = None else: previous.setNext(current.getNext()) # 后续打印逻辑...
内容的提问来源于stack exchange,提问作者Prathamesh Sawant
相关产品推荐
相关产品推荐

