取出鏈表對應結點的值,相加結果存到新鏈表對應的結點,因爲每一個結點只存一位數,而相加結果有多是兩位,所以須要進位,每次相加時將進位加入計算。ide
建立兩個結點用來分別遍歷兩個鏈表,都指向對應鏈表的首結點。
建立新鏈表存放結果,初始化值爲0,建立一個結點用來存放每次的結果,
1)遍歷兩鏈表,直到兩鏈表都爲空:
a:取出兩鏈表的值與進位carry相加爲sum,該值可能大於10,所以用carry保存每次相加的結果的進位進位值carry=sum/10,
b:將sum的個位(sum%10)存入新鏈表中下一個結點(這樣,提早建立了新的結點,新鏈表前移時就不會報空指針異常)
c:用於遍歷的兩個結點前進一步。
d: 新鏈表也前進一步。
2)最後,遍歷結束,判斷carry是否爲0,若不爲0,則將carry的值存入新鏈表的下一個結點。指針
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode cur1=l1; ListNode cur2=l2; ListNode result=new ListNode(0); ListNode cur=result; int carry=0; int x=0; int y=0; int sum=0; while(cur1!=null||cur2!=null){ if(cur1!=null){ x=cur1.val; }else{ x=0; } if(cur2!=null){ y=cur2.val; }else{ y=0; } sum=x+y+carry; carry=sum/10; cur.next=new ListNode(sum%10); cur=cur.next; if(cur1!=null){ cur1=cur1.next; } if(cur2!=null){ cur2=cur2.next; } } if(carry!=0){ cur.next=new ListNode(carry); } return result.next; }