1. 程式人生 > >java ListNode連結串列求和

java ListNode連結串列求和

題目

你有兩個用連結串列代表的整數,其中每個節點包含一個數字。數字儲存按照在原來整數中相反的順序,使得第一個數字位於連結串列的開頭。寫出一個函式將兩個整數相加,用連結串列形式返回和。

樣例

給出兩個連結串列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; } }