📌  相关文章
📜  教资会网络 | UGC NET CS 2018 年 7 月 – II |问题 77(1)

📅  最后修改于: 2023-12-03 14:54:51.405000             🧑  作者: Mango

教资会网络 | UGC NET CS 2018 年 7 月 – II |问题 77

简介

UGC NET CS 2018 年 7 月 – II 中的问题 77 考察了程序员关于基础数据结构的知识。作为程序员,数据结构是必不可少的一部分,它是计算机科学中最为重要的基础环节之一。在构建高效、健壮的软件系统和算法时,熟练掌握数据结构是非常必要的。

问题描述

给定两个链表,每个链表代表一个非负整数,其中每个节点都包含一个数字,并且数字存储在逆序顺序下。将两个链表相加并返回其总和。

例如,输入:

l1: 2->4->3
l2: 5->6->4

输出

7->0->8
解决方法
方法一:使用递归

使用递归方法可以将两个链表相加得到一个新链表。

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        if l1 is None:
            return l2
        if l2 is None:
            return l1
        carry = 0
        val = l1.val + l2.val + carry
        node = ListNode(val % 10)
        node.next = self.addTwoNumbers(l1.next, l2.next)
        if val >= 10:
            node.next = self.addTwoNumbers(node.next, ListNode(1))
        return node
方法二:使用迭代

使用迭代方法可以将两个链表相加得到一个新链表。

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        carry = 0
        dummy = node = ListNode(0)
        while l1 or l2 or carry:
            val = carry
            if l1:
                val += l1.val
                l1 = l1.next
            if l2:
                val += l2.val
                l2 = l2.next
            carry, val = divmod(val, 10)
            node.next = ListNode(val)
            node = node.next
        return dummy.next
总结

以上是两种常见的方法,可以解决给定两个链表相加的问题。需要注意的是,在实现时要注意链表结构的规范性,以避免空指针异常等情况。