2. Add Two Numbers

来源:互联网 发布:软件风险矩阵 编辑:程序博客网 时间:2024/05/18 21:41

2. Add Two Numbers
Difficulty: Medium

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
342+465=807
给定两个非空链表用来表示两个非负整数,数字反序存放,每个结点存放一位,返回一个新的链表,存放两个数字之和。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2);};ListNode* Solution::addTwoNumbers(ListNode* l1, ListNode* l2){    ListNode* list = new ListNode(0); ////    //分配内存给该结点,且list->val=0,且list->next=NULL;    ListNode* node = list; ////必须先给list分配内存,才能让node指向list    int add = 0;    int temp;    int val1;    int val2;    while(l1!=NULL || l2!=NULL) //NULL为空指针    {        val1=0;        val2=0;        if(l1!=NULL)        {            val1=l1->val;            l1=l1->next; ////            //l1==NULL时,不能l1=l1->next,因为不能访问NULL->next        }        if(l2!=NULL)        {            val2=l2->val;            l2=l2->next;        }        temp = val1 + val2 + add;        node->next=new ListNode(temp%10); ////        node=node->next;        add=temp/10;  //表示进位    }    if(add==1)  //若最后有进位    {        node->next=new ListNode(1);    }    return list->next;}
0 0