LeetCode解题报告 445. Add Two Numbers II [medium]

来源:互联网 发布:达内java就业 编辑:程序博客网 时间:2024/05/29 18:13

题目描述

You are given two linked lists representing two non-negative numbers. The most significant digit comes first 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.

Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.

Example:

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

解题思路

本题的意思就是两个链表的节点从右往左两两相加,主要需要考虑进位。
题中说明不能转置原链表,因此考虑新开两个vector来存储两个链表的节点值,而后将对应同一位置的节点值想加。再new 两个ListNode,一个存储相加后的结果的节点值,另一个表示结果节点的next。
注意要用一个变量来存储进位的值,因为最后的结果有可能会比两个链表的长度更大。

复杂度分析

时间复杂度为O(N),空间复杂度为O(N)。

代码如下:
class Solution {public:    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {        vector<int>mylist1;        vector<int>mylist2;        while (l1) {            mylist1.push_back(l1->val);            l1=l1->next;        }        while (l2) {            mylist2.push_back(l2->val);            l2=l2->next;        }                int n1=mylist1.size();        int n2=mylist2.size();                int jinwei=0;        int sum=0;                ListNode* head=nullptr;        ListNode* p=nullptr;                for (int i=n1-1,j=n2-1; i>=0||j>=0||jinwei>0; i--,j--) {            sum=jinwei;            if (i>=0) {                sum+=mylist1[i];            }            if (j>=0) {                sum+=mylist2[j];            }            jinwei=sum/10;                        p = new ListNode(sum%10);            p->next=head;            head=p;        }        return head;    }};


0 0
原创粉丝点击