题目地址:https://leetcode.com/problems/add-two-numbers/
题目大意就是说给定了你两个数,但是这两个数是倒序存在两个链表里的,例如说342 表现为2->4->3的链表,465表现为5->6->4的链表。
现在让你实现这两个数相加,并且输出也是一个这样类似的链表。
这个题目看起来很简单,思路也很清晰,无法就是按位遍历,然后有进位则下一位加一,貌似实现起来非常容易。但是,在实际过程中还是遇到了一些问题,主要是因为是用java写的,比C语言稍微繁琐一些,同时进位问题需考虑首位及末尾。最后accepted的代码如下:
public ListNode addTwoNumbers(ListNode l1,ListNode l2){
boolean hasCarry = false;
ListNode l3;
if((l1.val+l2.val)>=10){
l3 = new ListNode(l1.val+l2.val-10);
hasCarry = true;
}else {
l3 = new ListNode(l1.val+l2.val);
}
ListNode tmp1 = l1;//L1 point
ListNode tmp2 = l2;//L2 point
ListNode tmp3 = l3;//L3 point
ListNode tmp = null;
int value = 0;
while (tmp1.next!=null||tmp2.next!=null) {
if(tmp1.next!=null&&tmp2.next!=null){
tmp1 = tmp1.next;
tmp2 = tmp2.next;
value = tmp1.val+tmp2.val;
}else if (tmp1.next!=null&&tmp2.next==null) {
tmp1 = tmp1.next;
value = tmp1.val+0;
}else if (tmp2.next!=null&&tmp1.next==null) {
tmp2 = tmp2.next;
value = 0+tmp2.val;
}
value = hasCarry?value+1:value;
if(value>=10){
tmp = new ListNode(value-10);
hasCarry = true;
}else {
tmp = new ListNode(value);
hasCarry = false;
}
tmp3.next = tmp;
tmp3 = tmp;
}
if(hasCarry){
tmp3.next = new ListNode(1);
}
return l3;
}