题目链接
2. 两数相加 - 力扣(LeetCode)
题目大意
描述:给定两个非空的链表l1和l2。分别用来表示两个非负整数,每位数字都是按照逆序的方式存储的,每个节点存储一位数字。
要求:计算两个非负整数的和,并逆序返回表示和的链表。
说明:
- 每个链表中的节点数在范围 [1,100] 内。
- 0≤Node.val≤9。
- 题目数据保证列表表示的数字不含前导零。
示例
输入:l1=[2,4,3],l2=[5,6,4]输出:[7,0,8]解释:342+465=807.输入:l1=[0],l2=[0]输出:[0]解题思路
思路 1:模拟
模拟大数加法,按位相加,将结果添加到新链表上。需要注意进位和对 10 取余
参考代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */classSolution{publicListNodeaddTwoNumbers(ListNodel1,ListNodel2){ListNodehead=newListNode(0);ListNodecur=head;// 初始化进位intcarry=0;while(l1!=null||l2!=null||carry!=0){intnum1=(l1!=null)?l1.val:0;intnum2=(l2!=null)?l2.val:0;intsum=num1+num2+carry;carry=sum/10;// 将当前的个位数存入链表中cur.next=newListNode(sum%10);cur=cur.next;// 移动l1和l2的指针if(l1!=null){l1=l1.next;}if(l2!=null){l2=l2.next;}}returnhead.next;}}