[Leetcode] Add Two Numbers
数字表示为链表的格式,需要注意的几个地方:
一、在计算过程当中要注意进位问题,刚开始的进位为0,后面进位要在计算过程当中进行更新。
二、如果某个数字的list比较长,那么需要在最后将其加上
三、最后如果进位不是零,说明需要额外增加一位
代码如下:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 public class Solution { 10 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 11 if(l1==null||l2==null) 12 return l1==null?l2:l1; 13 int pre = 0; 14 ListNode newhead=null; 15 ListNode prenode=null; 16 while(l1!=null && l2!=null){ 17 int sum = pre + l1.val+ l2.val; 18 ListNode tmp = new ListNode(sum%10); 19 pre=sum/10; 20 if(newhead==null){ 21 newhead=tmp; 22 prenode=tmp; 23 }else{ 24 prenode.next=tmp; 25 prenode=tmp; 26 } 27 l1=l1.next; 28 l2=l2.next; 29 } 30 ListNode leftnode= null; 31 if(l1==null)leftnode=l2; 32 else leftnode=l1; 33 while(leftnode!=null){ 34 int sum=pre+leftnode.val; 35 ListNode tmp = new ListNode(sum%10); 36 prenode.next=tmp; 37 prenode=tmp; 38 pre=sum/10; 39 leftnode=leftnode.next; 40 } 41 if(pre!=0){ 42 ListNode tmp =new ListNode(pre); 43 prenode.next=tmp; 44 tmp.next=null; 45 } 46 return newhead; 47 } 48 }