如何将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
相关产品推荐
相关产品推荐

