解题思路:
1.先创建一个头结点,同时创建一个指针把头结点复制给指针。
2.进行遍历两个链表操作,计算两个数相加的值,之后来判断是否要进行进位操作,把求的值加入到新链表中。
3.之后来进行两个链表都进行后移操作,如果在遍历操作中有一个链表先遍历完的话,之后相加的值都为0
4.最后来判断最后两个相加的值是否大于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 one=new ListNode(0);
//又创建一个指针
ListNode two=one;
//来进行是否要进位的标准
boolean carry=false;
int ou=0;
//来进行链表遍历
while (l1!=null || l2!=null){
int x,y;
//遍历的过程中如果先有一个链表完了,它后面的值都为0
if(l1==null){
x=0;
}else{
x=l1.val;
}
if(l2==null){
y=0;
}else{
y=l2.val;
}
//来计算两数相加的值
int sum=x+y+ou;
//判断相加的值是否需要进位
if(sum>=10){
carry=true;
ou=1;
}else {
carry=false;
ou=0;
}
//来进行取余操作来把相加的数添加到新链表上
sum=sum%10;
two.next=new ListNode(sum);
two=two.next;
//把l1链表和l2链表后移一位。
if(l1!=null)
l1=l1.next;
if(l2!=null)
l2=l2.next;
}
//如果最后的两数相加大于1,就需要进行创建新一位
if (carry==true)
two.next=new ListNode(1);
return one.next;
}
}