2. 两数相加 - 力扣(LeetCode)
1.模拟
思路
最核心的一点就是将两个链表模拟为等长,不足的假设为0;
(1)设置一个新链表newl来代表相加结果。
(2)链表1与链表2相加,具体方式为sum=n1+n2+jin(进位),该位置的值为sum%10,jin=sum/10.
(3)判断两个链表的下一个节点是否为空,不为空就向下继续走。
(4)最后如果进位不为0,则需要再增加一个节点,节点值为jin(进位值)
具体代码
/**
* 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; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode init;
ListNode newl=new ListNode(-1);
init=newl;
int jin=0;
int sum=0;
while(l1!=null || l2!=null){
int n1 = l1!=null ? l1.val:0;
int n2 = l2!=null ? l2.val:0;
sum = (jin+n1+n2)%10;
jin = (jin+n1+n2)/10;
newl.next=new ListNode(sum);
newl=newl.next;
if(l1!=null){
l1=l1.next;
}
if(l2!=null){
l2=l2.next;
}
}
if(jin>0){
newl.next=new ListNode(jin);
}
return init.next;
}
}