题目描述
给出两非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字0之外,这两个数都不会以0开头。
样例
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
解题思路及代码
这道题目考察的主要的内容是对链表的操作及大整数加法的变形。根据字符串相加解题过程中,我们直接考虑竖式计算的过程。如下图:
Python版本
# 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:
carry = 0
dummy = ListNode(0)
curr = dummy
while l1 or l2 or carry != 0:
x = l1.val if l1 else 0
y = l2.val if l2 else 0
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
curr.next = ListNode((x + y + carry) % 10)
carry = (x + y + carry) // 10
curr = curr.next
return dummy.next
Java版本
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
int carry = 0;
while(l1 != null || l2 != null || carry != 0){
int x = l1 == null ? 0 : l1.val;
int y = l2 == null ? 0 : l2.val;
curr.next = new ListNode((x + y + carry) % 10);
carry = (x + y + carry) / 10;
l1 = l1 != null ? l1.next : null;
l2 = l2 != null ? l2.next : null;
curr = curr.next;
}
return dummy.next;
}
}
喜欢的话点个在看吧?