题目:
题目链接
解法:
从左到右依次去节点相加就好了,遇到进位将进位置1。我这里将短链表的值直接加到长链表上,需要注意的是,若存在最后一次加法还使得进位为1,那么需要新建一个节点连在尾部,值为1。
代码:
/**
* 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 t1=l1,t2=l2;
ListNode x1=l1,x2=l2;
//长链表赋值给t1
int len1=0;
int len2=0;
//保存倒数第二个节点
ListNode temp=null;
while(x1.next!=null){
len1++;
x1=x1.next;
}
while(x2.next!=null){
len2++;
x2=x2.next;
}
if(len1>=len2){
t1=l1;
t2=l2;
temp=x1;
}else{
t1=l2;
t2=l1;
temp=x2;
}
//进位
int addNum=0;
while(t1!=null&&t2!=null){
t1.val=t1.val+t2.val+addNum;
if(t1.val<10){
addNum=0;
}else{
t1.val-=10;
addNum=1;
}
t1=t1.next;
t2=t2.next;
}
while(t1!=null){
t1.val=t1.val+addNum;
if(t1.val<10){
addNum=0;
}else{
t1.val-=10;
addNum=1;
}
t1=t1.next;
}
if(addNum==1){
t1=new ListNode();
temp.next=t1; //这里很关键,由于最后一个节点指向新的引用,需要将倒数第二个节点的next指向他
t1.val=addNum;
t1.next=null;
}
if(len1>=len2) return l1;
else return l2;
}
}