原题链接:
力扣
这一个题目主要是一个模拟题 ,但是我觉得比较难,十分注重细节的处理。
要注意一点:如果最后的节点大于10 创建一个节点来表示进位
/**
* 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) {
//判断是不是只有一个数字的情况
if(l1.next==null&&l2.next==null)
{
if(l1.val+l2.val<10)
{ return new ListNode(l1.val+l2.val);
}
}
ListNode head=new ListNode();
ListNode tail=new ListNode();//一般都是两个空链表 一个向下迭代 一个标记位置
head=tail=null;
boolean flag=false;//用来判断进位
ListNode temp;
while(l1!=null||l2!=null)
{
int dx= l1==null?0:l1.val;
int dy= l2==null?0:l2.val;
//判断上一个状态有没有进位
if(flag==false)
{
if(dx+dy>=10)
{
temp=new ListNode(dx+dy-10);
flag=true;
}
else
{
temp=new ListNode(dx+dy);
}
}
else {
if(dx+dy+1>=10)
{
temp=new ListNode(dx+dy+1-10);
flag=true;
}
else
{
temp=new ListNode(dx+dy+1);
flag=false;
}
}
//判断是不是为空
if(head==null)//也是要注意的点
head=tail=temp;
tail.next=temp;
tail=tail.next;
if(l1!=null)
l1=l1.next;
if(l2!=null)
l2=l2.next;
}
if(flag==true)//还要创建一个新的节点
{
temp=new ListNode(1);
tail.next=temp;
tail=tail.next;
}
return head;
}
}
不辜负时光,代码照亮前行的路。