-
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807 -
代码思路:
多项式相加的问题。
新建一个链表,从两个待相加的链表表头开始分别遍历并比较,将较小的先存入新链表,然后依次往后遍历。
并用a值表示进位。
-
/** * 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 p=l1; ListNode q=l2; ListNode t,k,w; w=new ListNode(0); k=w; int a=0; for(;p!=null&&q!=null;p=p.next,q=q.next){ t=new ListNode(0); k.next=t; if(p.val+q.val+a<10){ t.val=p.val+q.val+a; a=0; }else{ a=p.val+q.val+a; t.val=a%10; a=a/10; } k=k.next; } if(p!=null){ k.next=p; while(p!=null){ if(a>0){ p.val+=a; a=0; } if(p.val>=10) { a=p.val/10; p.val%=10; } k=p; p=p.next; } if(a>0){ t=new ListNode(a); k.next=t; } } if(q!=null){ k.next=q; while(q!=null){ if(a>0){ q.val+=a; a=0; } if(q.val>=10) { a=q.val/10; q.val%=10; } k=q; q=q.next; } if(a>0){ t=new ListNode(a); k.next=t; } } if(q==null&&p==null){ if(a>0){ t=new ListNode(a); k.next=t; } } return w.next; } }
两数相加
最新推荐文章于 2023-03-07 11:00:25 发布