本文共 2070 字,大约阅读时间需要 6 分钟。
为了解决将两个链表相加的问题,我们可以使用栈来模拟加法过程。这种方法允许我们在不修改原链表节点值的情况下,逐位处理数字并处理进位。以下是详细的步骤和代码实现:
将链表转换为栈:将两个输入链表分别压栈到两个新的栈中,这样我们可以从低位开始处理每个数字。
初始化结果链表:使用一个指针来构建结果链表,从低位到高位逐步添加节点。
处理每个栈不为空的情况:在每次循环中,弹出两个栈的顶部节点,计算它们的和。
处理进位:如果和大于等于10,将其分解为进位和余数,并将余数加入结果链表。注意处理进位的特殊情况,例如当栈为空时需要创建新的节点。
处理剩余的节点:处理完所有节点后,继续处理任何剩余的进位情况。
以下是Python实现:
def addTwoNumbers(l1, l2): stack1 = [] stack2 = [] while l1: stack1.append(l1) l1 = l1.next while l2: stack2.append(l2) l2 = l2.next result = None current = None while stack1 or stack2: # 取出两个栈的顶部节点 node1 = stack1.pop() if stack1 else None node2 = stack2.pop() if stack2 else None sum_val = 0 if node1: sum_val += node1.val if node2: sum_val += node2.val if sum_val >= 10: carry = sum_val // 10 remainder = sum_val % 10 # 处理进位 if stack1: # 将当前栈顶的值加1 stack1[-1].val += carry carry = 0 elif stack2: stack2[-1].val += carry carry = 0 else: carry = 0 # 当栈为空时,carry会被处理 # 添加余数到结果链表 if result: result.next = remainder_node remainder_node = None else: remainder_node = ListNode(remainder) if current: current.next = remainder_node remainder_node = None else: result = remainder_node current = remainder_node else: remainder_node = ListNode(sum_val) if result: result.next = remainder_node current = remainder_node else: result = remainder_node current = remainder_node return result if result else None
解释:
这种方法确保了我们在不修改原链表节点值的情况下,正确地完成加法运算,并返回新的链表结果。
转载地址:http://mvwa.baihongyu.com/