给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
代码如下:
/**
* 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 newHead = new ListNode(0);//定义一个头节点
ListNode p=l1,q=l2,curr = newHead;//p和q分别为两链表的头,curr指当前相加的结果位数
int temp=0;//temp为进位数
while(p!=null ||q!=null){
int x=(p!=null)?p.val:0;//p!=null则x=p.val否则x=0
int y=(q!=null)?q.val:0;//q!=null则x=q.val否则x=0
int sum=temp+x+y;
temp=sum/10;
curr.next=new ListNode(sum%10);//curr为新链表,将curr.next填充sum%10的余数
curr=curr.next;
if(p!=null) {
p=p.next;
}
if(q!=null){
q=q.next;
}
}
if(temp>0){
curr.next=new ListNode(temp);
}
return newHead.next;//返回新结点的next
}
}