一、题目
二、解答
该题规律在于,只需要将两条链表内的数值依次相加,超过十的话进位1,即后面对应相加的结果加上进位的数值1
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
public class Solution {
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
ListNode n1=l1,n2=l2;//分别指向头节点
ListNode newNode=new ListNode(-1);//新建链表存放两链表相加之和,这是一个值为-1的哑结点
ListNode dummy=newNode;//dummy作为引用,指向新的结点
int carry=0;//是否需要进位+1
int newVal=0;
while( n1!=null || n2!=null || carry==1){
newVal = (n1 == null ? 0: n1.val) + (n2 == null ? 0:n2.val) + carry;
if(newVal>=10){
newVal=newVal%10;
carry=1;
}else{carry=0;}
dummy.next = new ListNode(newVal);
n1 = n1 == null? null: n1.next;
n2 = n2 == null? null: n2.next;
dummy = dummy.next;
}
return newNode.next; //如果返回是newNode,那么结点中会出现-1
}
}