You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Subscribe to see which companies asked this question
第一次代码:60ms
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = new ListNode();
int carry = 0;
boolean isFirst = true;
while(l1 != null && l2 != null){
int nowData = l1.val + l2.val + carry;
carry = 0;
if(nowData > 9){
singleNode = new ListNode(nowData-10);
carry=1;
}else{
singleNode = new ListNode(nowData);
}
if(isFirst){
isFirst = false;
result = singleNode;
}else{
lastNode.next = singleNode;
}
lastNode = singleNode;
l1 = l1.next;
l2 = l2.next;
}
while(l1 != null){
int nowData = l1.val + carry;
carry = 0;
if(nowData > 9){
singleNode = new ListNode(nowData-10);
carry=1;
}else{
singleNode = new ListNode(nowData);
}
if(isFirst){
isFirst = false;
result = singleNode;
}else{
lastNode.next = singleNode;
}
lastNode = singleNode;
l1 = l1.next;
}
while(l2 != null){
int nowData = l2.val + carry;
carry = 0;
if(nowData > 9){
singleNode = new ListNode(nowData-10);
carry=1;
}else{
singleNode = new ListNode(nowData);
}
if(isFirst){
isFirst = false;
result = singleNode;
}else{
lastNode.next = singleNode;
}
lastNode = singleNode;
l2 = l2.next;
}
if(carry == 1){
singleNode = new ListNode(1);
lastNode.next = singleNode;
lastNode = singleNode;
}
return result;
}
}
第二次代码:53ms
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result=null, singleNode, lastNode=null;
int big = 0;
while(l1 != null || l2 != null){
int a = 0, b = 0, nowVal = 0;
ListNode nextL1 = null, nextL2 = null;
if(l1 != null){
a = l1.val;
l1 = l1.next;
}
if(l2 != null){
b = l2.val;
l2 = l2.next;
}
nowVal = a + b + big;
if(nowVal > 9){
nowVal -= 10;
big = 1;
}else{
big = 0;
}
singleNode = new ListNode(nowVal);
singleNode.next = null;
if(result == null){
result = singleNode;
}else{
lastNode.next = singleNode;
}
lastNode = singleNode;
}
if(big > 0){
singleNode = new ListNode(big);
lastNode.next = singleNode;
}
return result;
}
}
模仿别人代码:49ms, 灵活创建链表,看起来就舒服很多,以后注意和的形式的时候,可以逐个加起来得到一个和
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result=null, singleNode, lastNode=null;
int big = 0;
while(l1 != null || l2 != null){
int a = 0, b = 0, nowVal = 0;
if(l1 != null){
a = l1.val;
l1 = l1.next;
}
if(l2 != null){
b = l2.val;
l2 = l2.next;
}
nowVal = a + b + big;
if(nowVal > 9){
nowVal -= 10;
big = 1;
}else{
big = 0;
}
singleNode = new ListNode(nowVal);
singleNode.next = null;
if(result == null){
result = singleNode;
}else{
lastNode.next = singleNode;
}
lastNode = singleNode;
}
if(big > 0){
singleNode = new ListNode(big);
lastNode.next = singleNode;
}
return result;
}
}