LeetCode 第2题
这个写的也不错,想+写+debug,花了一小时。
先遍历两个链表,相加其中的每一个元素,要用一个next变量记录两个数相加的结果,如果大于10则next置为1,两个数相加的时候要考虑next的值。
某一个链表遍历到头了,就只遍历另一个链表,也要考虑一下next的值。
/**
* 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 listNode = new ListNode();
ListNode res = listNode;
int next = 0;
while (l1!= null && l2 != null){
if(l1.val + l2.val > 9){
if(next != 0){
listNode.val = (l1.val + l2.val) - 10 + next;
next = 1;
}else{
listNode.val = (l1.val + l2.val) - 10;
next = 1;
}
}else{
if(next != 0 && l1.val+l2.val+next > 9){
listNode.val = (l1.val + l2.val) - 10 + next;
next = 1;
}else if(next != 0 && l1.val+l2.val+next <= 9){
listNode.val = (l1.val + l2.val) +next;
next = 0;
}else{
listNode.val = (l1.val + l2.val);
}
}
l1 = l1.next;
l2 = l2.next;
if(null == l1 || null == l2){
break;
}
listNode.next = new ListNode();
listNode = listNode.next;
}
if(l1 == null){
while(l2 != null ){
listNode.next = new ListNode();
listNode = listNode.next;
if(next != 0 && next+l2.val > 9){
listNode.val = l2.val + next- 10;
next = 1;
}else{
listNode.val = l2.val+next;
next = 0;
}
l2 = l2.next;
}
}else if(l2 == null){
while(l1 != null ){
listNode.next = new ListNode();
listNode = listNode.next;
if(next != 0 && next+l1.val > 9){
listNode.val = l1.val + next- 10;
next = 1;
}else{
listNode.val = l1.val+next;
next = 0;
}
l1 = l1.next;
}
}
if(next == 1){
listNode.next = new ListNode();
listNode.next.val = 1;
}
return res;
}
}
结果