LeetCode - 2. Add Two Numbers

简介: 2. Add Two Numbers  Problem's Link  ---------------------------------------------------------------------------- Mean:  给你两个数字链表,让你将两个链表相加,结果保存在一个新链表中.

2. Add Two Numbers 

Problem's Link

 ----------------------------------------------------------------------------

Mean: 

给你两个数字链表,让你将两个链表相加,结果保存在一个新链表中.

analyse:

最基本的链表操作.

做链表题时只需注意:先分配(new ListNode(val)),再h=h->next.也就是不要将指针指向空指针.

Time complexity: O(N)

 

view code

/**
* -----------------------------------------------------------------
* Copyright (c) 2016 crazyacking.All rights reserved.
* -----------------------------------------------------------------
*       Author: crazyacking
*       Date  : 2016-01-29-16.16
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long( LL);
typedef unsigned long long( ULL);
const double eps( 1e-8);

// 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)
    {
        int jinwei = 0;
        ListNode * h1 = l1;
        ListNode * h2 = l2;
        ListNode * ans , * ret;
        bool isFirst = true;
        while( h1 && h2)
        {

            int val = h1 -> val + h2 -> val + jinwei;
            int now = val % 10;
            jinwei = val / 10;
            if( isFirst)
            {
                ans = new ListNode( now);
                ret = ans;
                isFirst = false;
            }
            else
            {
                ans -> next = new ListNode( now);
                ans = ans -> next;
            }
            h1 = h1 -> next;
            h2 = h2 -> next;
        }
        while( h1)
        {
            int val = h1 -> val + jinwei;
            int now = val % 10;
            jinwei = val / 10;
            if( isFirst)
            {
                ans = new ListNode( now);
                ret = ans;
                isFirst = false;
            }
            else
            {
                ans -> next = new ListNode( now);
                ans = ans -> next;
            }
            h1 = h1 -> next;
        }
        while( h2)
        {
            int val = h2 -> val + jinwei;
            int now = val % 10;
            jinwei = val / 10;
            if( isFirst)
            {
                ans = new ListNode( now);
                ret = ans;
                isFirst = false;
            }
            else
            {
                ans -> next = new ListNode( now);
                ans = ans -> next;
            }
            h2 = h2 -> next;
        }
        while( jinwei)
        {
            ans -> next = new ListNode( jinwei % 10);
            jinwei /= 10;
            ans = ans -> next;
        }
        return ret;
    }
};


int main()
{
    int n1 , n2;
    while( cin >> n1 >> n2)
    {
        ListNode * h1 , * head1;
        ListNode * h2 , * head2;
        int tmp;
        for( int i = 0; i < n1; ++ i)
        {
            cin >> tmp;
            if( ! i)
            {
                h1 = new ListNode( tmp);
                head1 = h1;
            }
            else
            {
                h1 -> next = new ListNode( tmp);
                h1 = h1 -> next;
            }
        }

        for( int i = 0; i < n2; ++ i)
        {
            cin >> tmp;
            if( ! i)
            {
                h2 = new ListNode( tmp);
                head2 = h2;
            }
            else
            {
                h2 -> next = new ListNode( tmp);
                h2 = h2 -> next;
            }
        }

        Solution solution;
        ListNode * ans = solution . addTwoNumbers( head1 , head2);
        puts( "----------------------");
        while( ans)
        {
            cout << ans -> val;
            ans = ans -> next;
        }
        cout << endl;
    }
    return 0;
}

 

目录
相关文章
|
存储 缓存 算法
LeetCode刷题---Two Sum(一)
LeetCode刷题---Two Sum(一)
Leetcode 4. Median of Two Sorted Arrays
题目描述很简单,就是找到两个有序数组合并后的中位数,要求时间复杂度O(log (m+n))。 如果不要去时间复杂度,很容易就想到了归并排序,归并排序的时间复杂度是O(m+n),空间复杂度也是O(m+n),不满足题目要求,其实我开始也不知道怎么做,后来看了别人的博客才知道有个二分法求两个有序数组中第k大数的方法。
39 0
Leetcode 623. Add One Row to Tree
题目很简单,在树的第d层加一层,值为v。递归增加一层就好了。代码如下
47 0
|
存储 C++ Python
LeetCode刷题---Add Two Numbers(一)
LeetCode刷题---Add Two Numbers(一)
|
存储 算法 安全
LeetCode - #2 Add Two Numbers
我们社区从本期开始会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。
LeetCode - #2 Add Two Numbers
|
存储 算法 安全
LeetCode - #1 Two Sum
我们社区从本期开始会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。
LeetCode - #1 Two Sum
LeetCode 167 Two Sum II - Input array is sorted(输入已排序数组,求其中两个数的和等于给定的数)
给定一个有序数组和一个目标值 找出数组中两个成员,两者之和为目标值,并顺序输出
86 0
LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists
LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists
LeetCode 1380. 矩阵中的幸运数 Lucky Numbers in a Matrix
LeetCode 1380. 矩阵中的幸运数 Lucky Numbers in a Matrix
|
存储 算法
LeetCode 350. 两个数组的交集 II ntersection of Two Arrays II
LeetCode 350. 两个数组的交集 II ntersection of Two Arrays II