链表相加【刷题记录】

一、 题目描述:

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。 给定两个这种链表,请生成代表两个整数相加值的结果链表。
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

二、 解题思路:
(一)双栈法

本题的难点就在于如何按照正常的运算进行加法, 是使用栈(因为进栈的顺序为先进后出。最后一个栈项元素一定相当于各位那个数字)
1\就定义两个线,其中找1用来在放head1的元素,栈2用来存放head2的元素;
2\ 然后放光元素后。按照正常的加法递算进行求解了。
注意进位的情况。在这里插入图片描述

class Solution:
     def addInList(self , head1 , head2 ):
        # write code here
        s1,s2 = [],[]#用来存储两个链表的数据
        while head1:#将head1的元素放入栈1
            s1.append(head1.val)
            head1 = head1.next
        while head2:#将head2的元素放入栈2
            s2.append(head2.val)
            head2 = head2.next
        res = None
        cnt = 0#如果两个值的加和>10,就会产生进位,这个用来存储进位
        while s1 or s2:
            x1 = 0 if not s1 else s1.pop()
            x2 = 0 if not s2 else s2.pop()
            sum = x1 + x2 + cnt#当前这一位的总和
            cnt = sum // 10 #查看当前加和是否有进位
            #进行当前节点的插入
            tempNode = ListNode(sum % 10)
            tempNode.next = res
            res = tempNode
        #最后一位的时候还得判断当时是否有进位如果存在进位就得在插入一个元素
        if cnt:
            tempNode = ListNode(cnt)
            tempNode.next = res
            res = tempNode
        return res

(二) 反转链表

    #定义了反转链表
    def ReverseList(self,pHead):
        res = None
        cur = pHead
        while cur:
            temp = cur.next
            cur.next = res
            res = cur
            cur = temp
        return res
    def addInList(self , head1 , head2 ):
        # write code here
        l1 = self.ReverseList(head1)#翻转链表l1
        l2 = self.ReverseList(head2)#翻转链表l2
        res = None #用于返回的链表
        cnt = 0#如果两个值的加和>10,就会产生进位,这个用来存储进位
        while l1 or l2:
            x1 = 0 if not l1 else l1.val
            x2 = 0 if not l2 else l2.val
            sum = x1 + x2 + cnt#当前这一位的总和
            cnt = sum // 10#查看当前加和是否有进位
            #进行当前节点的插入
            tempNode = ListNode(sum % 10)
            tempNode.next = res
            res = tempNode
            #链表的移动
            l1 = None if not l1 else l1.next
            l2 = None if not l2 else l2.next
        #最后一位的时候还得判断当时是否有进位如果存在进位就得在插入一个元素
        if cnt:
            tempNode = ListNode(cnt)
            tempNode.next = res
            res = tempNode
        return res
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值