添加两个数字(Leetcode)

问题:

给定两个非空的链表,表示两个非负整数。数字以相反的顺序存储,每个节点包含一个数字。添加两个数字并将其作为链表返回。

您可以假设两个数字不包含任何前导零,除了数字0本身。

输入:(2 - > 4 - > 3)+(5 - > 6 - > 4)
输出: 7 - > 0 - > 8

 

代码:

 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 class Solution {
10     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
11         
12         ListNode p=l1;
13         ListNode q=l2;
14         ListNode l=new ListNode(0);
15         ListNode curr=l;
16         
17         int carry=0;
18         
19         while(p!=null||q!=null){
20             
21             int x=(p!=null)?p.val:0;
22             int y=(q!=null)?q.val:0;
23             
24             int z=carry+x+y;
25             
26             carry=z/10;
27             curr.next=new ListNode(z%10);
28             curr=curr.next;
29             
30             if(p!=null){
31                 
32                 p=p.next;
33                 
34             }
35             
36             if(q!=null){
37                 
38                 q=q.next;
39                 
40             }
41             
42         }
43         
44         if(carry>0){
45             
46             curr.next=new ListNode(carry);
47             
48         }
49         
50         return l.next;
51 
52     }
53 }

 

posted @ 2017-09-27 11:52  xzy不会飞的地板流  阅读(306)  评论(0)    收藏  举报