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

如何将LeetCode的ListNode转为普通列表及将列表转回ListNode?

ListNode与普通列表互相转换及完整实现

ListNode是单链表结构,每个节点只有val(当前节点存储的数值)和next(指向链表下一个节点的指针,最后一个节点的next为None)两个属性,不需要提前获取长度,循环判断当前节点是否为None即可完成遍历。

1. ListNode转普通列表实现

通过移动指针遍历链表所有节点,依次收集val到列表中:

def listnode_to_list(node):
    res = []
    while node:
        res.append(node.val)
        node = node.next
    return res

2. 普通列表转ListNode实现

使用哑节点简化头节点处理,遍历列表依次创建节点挂载到链表末尾:

def list_to_listnode(lst):
    dummy = ListNode()
    cur = dummy
    for num in lst:
        cur.next = ListNode(num)
        cur = cur.next
    return dummy.next

3. 补全后可直接运行的完整代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        # ListNode转普通列表的辅助函数
        def listnode_to_list(node):
            res = []
            while node:
                res.append(node.val)
                node = node.next
            return res
        
        # 普通列表转ListNode的辅助函数
        def list_to_listnode(lst):
            dummy = ListNode()
            cur = dummy
            for num in lst:
                cur.next = ListNode(num)
                cur = cur.next
            return dummy.next
        
        l3 = [] # 结果列表
        shift = 0 

        # 执行链表到列表的转换
        list1 = listnode_to_list(l1)
        list2 = listnode_to_list(l2)

        if len(list1) > len(list2):
            l_long = list1
            l_short = list2
        else:
            l_long = list2
            l_short = list1
        
        # 逐位处理短列表对应部分
        for i in range(len(l_short)):
            total = l_long[i] + l_short[i] + shift
            l3.append(total % 10)
            shift = total // 10
        
        # 处理长列表剩余部分
        for i in range(len(l_short), len(l_long)):
            total = l_long[i] + shift
            l3.append(total % 10)
            shift = total // 10
        
        # 处理最终剩余进位
        if shift:
            l3.append(shift)
        
        # 转换回ListNode结构返回
        return list_to_listnode(l3)

内容的提问来源于stack exchange,提问作者Sergii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:09:04