NC40 两个链表生成相加链表

这篇博客探讨了如何使用栈解决链表翻转和两个链表相加的问题。首先,通过反转链表的方法解决了链表长度不一致的问题。然后,利用栈的特性实现了两个链表节点值的相加,包括处理进位标志。博客还提到了如何通过两个栈高效地进行加法运算,但未给出具体代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 翻转链表

  • 先翻转链表
  • 解决链表长度不一问题
  • 解决最后的carry进位标志
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#
# 
# @param head1 ListNode类 
# @param head2 ListNode类 
# @return ListNode类
#
class Solution:
    def addInList(self , head1 , head2 ):
        # 可以用栈!!!!
        
        
        
        # write code here
        # 1.reverse the linked list
        p1 = head1
        p2 = head2
        l1 = self.reverseL(p1)
        l2 = self.reverseL(p2)
        carry = 0
        pre = None
        
        while l1 and l2:
            posTotal = (l1.val + l2.val + carry)
            pos =  posTotal % 10
            carry = posTotal // 10
            newNode = ListNode(pos)
            newNode.next = pre
            pre = newNode
            l1 = l1.next
            l2 = l2.next
        while l1:
            posTotal = (l1.val + 0 + carry)
            pos =  posTotal % 10
            carry = posTotal // 10
            newNode = ListNode(pos)
            newNode.next = pre
            pre = newNode
            l1 = l1.next
        while l2:
            posTotal = (l2.val + 0 + carry)
            pos =  posTotal % 10
            carry = posTotal // 10
            newNode = ListNode(pos)
            newNode.next = pre
            pre = newNode
            l2 = l2.next
        if carry:
            newNode = ListNode(1)
            newNode.next = pre
            pre = newNode
        return pre
    
    def reverseL(self, head1):
        pre = None
        p = head1
        while p:
#             I
#             9->    3->7->None
            tmp = p.next
            p.next = pre
            pre = p
            p = tmp
        return pre





2. 两个栈

充分利用栈的先进后出的性质解决加法问题
这里就不上代码了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值