public class AddListNode {
public ListNode addTwoNumbers(ListNode list1,ListNode list2){
ListNode list = new ListNode(-1);
calcuNum(list1,list2,list,0);
return list;
}
public void calcuNum(ListNode list1,ListNode list2,ListNode list,int t){
if(list1 != null && list2 != null){
int sum = list1.val + list2.val + t;
int a = sum%10;
int b = sum/10;
if(list != null){
list.val = a;
}else{
list = new ListNode(a);
}
calcuNum(list1.next,list2.next,list.next,b);
}else if(list1 != null){
int sum = list1.val + t;
int a = sum%10;
int b = sum/10;
if(list != null){
list.val = a;
}else{
list = new ListNode(a);
}
calcuNum(list1.next,null,list.next,b);
}else if(list2 != null){
int sum = list2.val + t;
int a = sum%10;
int b = sum/10;
if(list != null){
list.val = a;
}else{
list = new ListNode(a);
}
calcuNum(null,list2.next,list.next,b);
}
}
public static void main(String[] args){
AddListNode node = new AddListNode();
ListNode list1 = new ListNode(2);
list1.next = new ListNode(4);
list1.next.next = new ListNode(3);
ListNode list2 = new ListNode(5);
list2.next = new ListNode(6);
list2.next.next = new ListNode(4);
System.out.println(node.addTwoNumbers(list1, list2).toString(node.addTwoNumbers(list1, list2)));
}
}
class ListNode{
int val;
ListNode next;
ListNode(int x){
val = x;
}
public String toString(ListNode node){
String string = "[";
while(node != null){
string += node.val + ",";
node = node.next;
}
string = string.substring(0, string.lastIndexOf(","));
string += "]";
return string;
}
}
在函数里让node等于另一个对象,不会修改调用者。但是修改node.next或者node.val则会反应到调用者。
public class AddListNode {
public ListNode addTwoNumbers(ListNode list1,ListNode list2){
ListNode list = new ListNode(-1);
calcuNum(list1,list2,list,0);
return list;
}
public void calcuNum(ListNode list1,ListNode list2,ListNode list,int t){
if(list1 != null && list2 != null){
int sum = list1.val + list2.val + t;
int a = sum%10;
int b = sum/10;
// if(list != null){
// list.val = a;
// }else{
// list = new ListNode(a);
// }
// calcuNum(list1.next,list2.next,list.next,b);
if(list.val < 0){
list.val = a;
}else{
addNode(list,a);
}
calcuNum(list1.next,list2.next,list,b);
}else if(list1 != null){
int sum = list1.val + t;
int a = sum%10;
int b = sum/10;
// if(list != null){
// list.val = a;
// }else{
// list = new ListNode(a);
// }
// calcuNum(list1.next,null,list.next,b);
if(list.val < 0){
list.val = a;
}else{
addNode(list,a);
}
calcuNum(list1.next,null,list,b);
}else if(list2 != null){
int sum = list2.val + t;
int a = sum%10;
int b = sum/10;
// if(list != null){
// list.val = a;
// }else{
// list = new ListNode(a);
// }
// calcuNum(null,list2.next,list.next,b);
if(list.val < 0){
list.val = a;
}else{
addNode(list,a);
}
calcuNum(null,list2.next,list,b);
}else if(t > 0){
addNode(list, t);
}
}
public void addNode(ListNode list,int a){
while(list.next != null){
list = list.next;
}
list.next = new ListNode(a);
}
public static void main(String[] args){
AddListNode node = new AddListNode();
ListNode list1 = new ListNode(2);
//list1.next = new ListNode(4);
//list1.next.next = new ListNode(3);
ListNode list2 = new ListNode(8);
list2.next = new ListNode(9);
//list2.next.next = new ListNode(4);
System.out.println(node.addTwoNumbers(list1, list2).toString(node.addTwoNumbers(list1, list2)));
}
}
class ListNode{
int val;
ListNode next;
ListNode(int x){
val = x;
}
public String toString(ListNode node){
String string = "[";
while(node != null){
string += node.val + ",";
node = node.next;
}
string = string.substring(0, string.lastIndexOf(","));
string += "]";
return string;
}
}