Add to numbers

来源:互联网 发布:上海知金教育 编辑:程序博客网 时间:2024/05/29 18:01

题目:

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

Subscribe to see which companies asked this question.

代码:

class Solution {  
public:  
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {    解析:首先我们先判断我们建立的两个链表是否为空的链表,如果l1为空的,那么返回l2;同理,l2为空时返回l1
        if(l1 == NULL or l2 == NULL)  
if(l1 == NULL)
return l2;
else
return l1;
        int b = 0;                                                                                       解析: 建立b为进位的变量在下面方便使用。  
        ListNode *a1 = l1, *a2 = l2, *p1 = NULL;  
        while(a1 != NULL)                                                                     解析:我们是while(a1 != NULL),所以要始终保持a1不为空,如果a1为空则跳出。

        {                                                                                                     val1和val2是l1和l2里面的一个个的值,他们的下标相同,所以要相加。
            int val1 = a1->val;    //val1为a1中的值                                                            
            int val2;
            if(a2 == NULL){       //如果a2 为空的话,a2 = 0;否则val2表示a2中的值。

                val2 = 0;
            }
            else{
                val2 = a2->val;
            }
            if(val1 + val2 + b > 9)                                                      解析:如果val1和val2在加上进位变量的和大于9,表示需要进位,这时,变量b由0变为1;带入下一个val1和val2

            {                                                                                          的计算之中,而且计算出来的结果只要求其个位即可,所以用%10来表示。
                a1->val = (val1 + val2 + b) % 10;  
                b = 1;  
            }  
            else  
            {  
                a1->val = val1 + val2 + carry;                                 解析:当然,如果不大于9,则进位还为0.
                b = 0;  
            }  
            if(a1->next == NULL && a2)  
            {  
                a1->next = a2->next;                                               解析:如果a1的下一个节点为空的话,那么将a2的下一个节点赋值给a1的下一个节点,a2的下一个节点为空,
                a2->next = NULL;                                                    因为我们上面的while(a1 !=NULL)(上面有强调)
            }  
            p1 = a1;                                                                          解析:最后的结果赋值给p1,然后a1 ,a2进入下一个节点
            a1 = a1->next;    
            if(a2 !=NULL){
                a2 = a2->next;
            }
        }  
        if(b == 1)                                                                         解析:如果最后的进位变量b为1的话,表示相比于原来的长度要多了一位,所以要从新添加一个新的节点newNode。
        {  
            ListNode * newNode = new ListNode(1);  
            p1->next = newNode;  
        }  
        return l1;  
              
    }  
};

0 0
原创粉丝点击