下面代码的list.next作为参数传递后并没有对原来的list有任何影响

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;
    }
}