📅  最后修改于: 2023-12-03 14:54:51.405000             🧑  作者: Mango
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
以上是两种常见的方法,可以解决给定两个链表相加的问题。需要注意的是,在实现时要注意链表结构的规范性,以避免空指针异常等情况。