leetcode11-面试题 02.05. 链表求和

                           leetcode11-面试题 02.05. 链表求和

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

示例:

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912

思路一:

把链表转换成数组,对数组进行相加

代码一:

扫描二维码关注公众号,回复: 12910969 查看本文章
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        # 第一步:获取两个数字的各个元素
        num1 = []
        num2 = []
        while l1:
            num1.append(l1.val)
            l1 = l1.next
        while l2:
            num2.append(l2.val)
            l2 = l2.next

        # 正常求和后转换成str
        res = str(int(''.join([str(i) for i in num1[::-1]])) + int(''.join([str(i) for i in num2[::-1]])))
        return self.head_list(res)

    def head_list(self, s):
        head = ListNode(int(s[0]))  # head初始化为s的首元素
        for i in s[1:]:
            node = ListNode(int(i))  # 新建链表节点
            node.next = head  # 把当前有val的head节点复制给node.next
            head = node  # 把node复制给head节点
        return head

思路二:指针

  • 设置s来判断是否需要进位,s=0不需要进位,s=1进位
  • 利用temp指针来存放
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        ans = ListNode(None)
        node = ans
        s = 0
        while l1 or l2:
            n1 = l1.val if l1 else 0
            n2 = l2.val if l2 else 0
            total = n1 + n2 + s
            num = total//10
            if num > 0:
                temp = ListNode(total%10)
                node.next = temp
                node = temp
                s = 1
            else:
                s = 0
                temp = ListNode(total)
                node.next = temp
                node = temp
            if l1:l1 = l1.next
            if l2:l2 = l2.next
        if num > 0 and not l1 and not l2:
            node.next = ListNode(1)
        return ans.next

猜你喜欢

转载自blog.csdn.net/qq_43299522/article/details/108940220
今日推荐