java ListNode連結串列求和
阿新 • • 發佈:2019-01-24
題目
你有兩個用連結串列代表的整數,其中每個節點包含一個數字。數字儲存按照在原來整數中相反的順序,使得第一個數字位於連結串列的開頭。寫出一個函式將兩個整數相加,用連結串列形式返回和。
樣例
給出兩個連結串列3->1->5->null 和 5->9->2->null,返回8->0->8->null
分析
package leetcode;
class ListNode{
int val;
ListNode nextNode;
ListNode(int val){
this.val=val;
this .nextNode=null;
}
}
public class n5ListNodePlus {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a=new int[]{1,5,6};
int[] b=new int[]{4,8,2};
ListNode alist=buildListNode( a);
ListNode blist=buildListNode( b);
ListNode listNode;
listNode=alist;
while (listNode!=null){
System.out.print(listNode.val);
listNode=listNode.nextNode;
}
System.out.println();
listNode=blist;
while(listNode!=null){
System.out.print(listNode.val);
listNode=listNode.nextNode;
}
System.out .println();
listNode=addList(alist,blist);
while(listNode!=null){
System.out.print(listNode.val);
listNode=listNode.nextNode;
}
}
public static ListNode addList(ListNode list1,ListNode list2){
ListNode pre=null;
ListNode last=null,newNode=null;
ListNode result=null;
int val=0;
int carry=0;
while(list1!=null||list2!=null){
val=((list1==null?0:list1.val)+(list2==null?0:list2.val)+carry)%10;
carry=((list1==null?0:list1.val)+(list2==null?0:list2.val)+carry)/10;
list1=list1==null?null:list1.nextNode;
list2=list2==null?null:list2.nextNode;
newNode=new ListNode(val);
if(pre==null){
pre=newNode;
last=newNode;
}else{
last.nextNode=newNode;
last=newNode;
}
}
if(carry>0){
newNode=new ListNode(carry);
last.nextNode=newNode;
last=newNode;
}
return pre;
}
public static ListNode buildListNode(int [] list){
ListNode first=null,last=null,newNode;
for(int i=0;i<list.length;i++){
newNode=new ListNode(list[i]);
if(first==null){
first=newNode;
last=newNode;
}else{
last.nextNode=newNode;
last=newNode;
}
}
return first;
}
}