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

如何修改Python链表排序代码以按人口数量从大到小排序?

链表排序修改方案:按人口数量从大到小排序

需要修改的核心部分

你的代码当前默认按元组的第一个元素(国家名称)A-Z排序,要改成按人口从大到小排序,只需修改**sortLinkedListHelper函数里的比较判断逻辑**:

  • 原代码用current.next.data < newNode.data比较整个元组,会优先对比国家名称
  • 要改为专门比较元组的第二个元素(人口数量),并且为了实现降序,把比较符号反转,最终条件为current.next.data[1] > newNode.data[1]

修改后的完整代码

# 创建链表节点类
class Node:
    def __init__(self, data=None, next=None):
        self.data = data
        self.next = next

# 遍历并打印链表的函数
def printList(head):
    temp = head
    while temp:
        print(temp.data, end=" ")
        temp = temp.next

# 辅助函数:将新节点插入到正确的排序位置
def sortLinkedListHelper(head, newNode):
    temp = Node()
    current = temp
    temp.next = head

    # 修改比较逻辑:按人口数量从大到小排序
    while current.next and current.next.data[1] > newNode.data[1]:
        current = current.next

    newNode.next = current.next
    current.next = newNode
    return temp.next

# 排序链表的主函数
def sortLinkedList(head):
    answerList = None
    current = head

    while current:
        nextNode = current.next
        answerList = sortLinkedListHelper(answerList, current)
        current = nextNode

    return answerList

if __name__ == '__main__':
    # 链表数据:(国家名称, 人口数量)
    countries = [("Ukraine",41879904),("Brunei",442400),("Christmas Island (Australia)",1928),("Mauritius",1265985),("Lesotho",2007201),("Guatemala",16604026),("British Virgin Islands (UK)",30030),("Malta",493559)]

    head = None
    # 从后往前构建链表
    for i in reversed(range(len(countries))):
        head = Node(countries[i], head)

    # 打印原链表
    print("原链表: ")
    printList(head)

    # 排序链表
    head = sortLinkedList(head)

    # 打印排序后的链表
    print("\n\n按人口从大到小排序后的链表: ")
    printList(head)

逻辑说明

  • Python中默认的元组比较是按元素顺序依次对比,比如("A", 100) < ("B", 50)会返回True,因为优先对比第一个元素
  • 改成data[1]后,就专门针对元组里的人口数值进行对比
  • 把<替换成>,是为了让人口多的节点排在前面:当当前节点的人口比新节点大时,继续往后查找插入位置,直到找到人口比新节点小的位置,再插入新节点

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:28