You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何格式化输出语句实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:40:09