第二题对于新人来说感觉有点懵,果然简单和中等差别还是蛮大的么。
原题链接:https://leetcode-cn.com/problems/add-two-numbers/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int num=0;//进位
int sum=0;//和
//先初始化一个节点值为0的空节点
ListNode first = new ListNode(0);
//此时cur与first都指向0节点
ListNode cur= first;
while(l1!=null||l2!=null) {
//将l1和l2中的值赋给x,y;不能省略判断语句,不然执行深度不同的链表会直接报错
int x = l1 != null ? l1.val : 0;
int y = l2 != null ? l2.val : 0;
//求和
sum=num+x+y;
//num只可能为1或0
num=sum/10;
//为0节点之后的节点1赋值
cur.next=new ListNode(sum%10);
//现在cur指向节点1,l1与l2也切换到下一节点
cur=cur.next;
//不能省略判断语句,不然执行深度不同的链表会直接报错
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
//由于数值相加有进位的话要放到下一个节点,所以增加一个判断语句
if(num>0) {
cur.next=new ListNode(num);
}
//加上返回值
return first.next;
}
}
由于链表学的不咋地,这代码想了半天,最后借鉴了一下别人的思路,尽管结果和我想的不一样,我想的是链表深度不同是按0来补全,结果这个代码在链表深度不同时是循环利用的,因为这样钻进了死胡同。
做完收获挺多的,继续加油!!!