题目来源:https://leetcode.com/problems/add-two-numbers/

You are given two linked lists representing two non-negative numbers. 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.

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

题目要求:给出两个链表l1和l2,将相对应的元素相加,如果产生进位则保留个位,相应的十位加在后面的对应元素上.

解体思路:

首先判断链表是否为空,若l1空,直接返回l2,相反返回l2

然后找到l1和l2链表最短的一个长度min_len,进入循环

循环过程中,为了减少空间的开销,可以将链表l1作为最终的结果链表,只需要改变l1的最大容量为l1+l2即可,另外相加过程中需要一个整型temp变量来保存进位.

循环结束之后,判断l1或l2空否(之前计算最短链表时可以做标记),然后将不空的链表中其他元素全部放入结果链表中即可.

提交代码:

 /**
* 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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
// ListNode *pResult = NULL;
// ListNode **pCur = &pResult; ListNode rootNode();
ListNode *pCurNode = &rootNode;
int a = ;
while (l1 || l2)
{
int v1 = (l1 ? l1->val : );
int v2 = (l2 ? l2->val : );
int temp = v1 + v2 + a;
a = temp / ;
ListNode *pNode = new ListNode((temp % ));
pCurNode->next = pNode;
pCurNode = pNode;
if (l1)
l1 = l1->next;
if (l2)
l2 = l2->next;
}
if (a > )
{
ListNode *pNode = new ListNode(a);
pCurNode->next = pNode;
}
return rootNode.next;
}
};

下面给出数组解决的代码,具体过程相同,只是数据存储结构不同:

 #include <bits/stdc++.h>
#define MAX 1000010 using namespace std; int main()
{
int n1,n2;
while(~scanf("%d %d",&n1,&n2))
{
int *a=new int[n1+n2+];
int *b=new int[n2];
for(int i=;i<n1;i++)
scanf("%d",&a[i]);
for(int i=;i<n2;i++)
scanf("%d",&b[i]);
int minlen=min(n1,n2);
int maxlen=n1+n2-minlen;
int temp=;
for(int i=;i<minlen;i++)
{
a[i]=a[i]+b[i]+temp;
if(a[i]>=)
{
temp=a[i]/;
a[i]=a[i]%;
}
}
for(int j=minlen;j<maxlen;j++)
{
if(maxlen==n1)
a[j]=a[j];
else
a[j]=b[j];
}
for(int i=;i<maxlen;i++)
printf("%d ",a[i]);
printf("\n");
}
}

  

LeetCode 2 Add Two Numbers(链表操作)的更多相关文章

  1. leetcode 2 Add Two Numbers(链表)

    数字反过来这个没有什么麻烦,就是镜像的去算十进制加法就可以了,然后就是简单的链表. /** * Definition for singly-linked list. * struct ListNode ...

  2. [LeetCode]2. Add Two Numbers链表相加

    注意进位的处理和节点为null的处理 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int flag = 0; ListNode ...

  3. LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters

    LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters 题记 刷LeetCod ...

  4. [LeetCode] 445. Add Two Numbers II 两个数字相加之二

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

  5. LeetCode:1. Add Two Numbers

    题目: LeetCode:1. Add Two Numbers 描述: Given an array of integers, return indices of the two numbers su ...

  6. LeetCode 2. add two numbers && 单链表

    add two numbers 看题一脸懵逼,看中文都很懵逼,链表怎么实现的,点了debug才看到一些代码 改一下,使本地可以跑起来 # Definition for singly-linked li ...

  7. LeetCode 面试:Add Two Numbers

    1 题目 You are given two linked lists representing two non-negative numbers. The digits are stored in ...

  8. 【leetcode】Add Two Numbers

    题目描述: You are given two linked lists representing two non-negative numbers. The digits are stored in ...

  9. LeetCode #002# Add Two Numbers(js描述)

    索引 思路1:基本加法规则 思路2:移花接木法... 问题描述:https://leetcode.com/problems/add-two-numbers/ 思路1:基本加法规则 根据小学学的基本加法 ...

  10. [Leetcode Week15] Add Two Numbers

    Add Two Numbers 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/add-two-numbers/description/ Descrip ...

随机推荐

  1. Communication - 03.RILC

    RIL层的作用大体上就是将上层的命令转换成相应的AT指令,控制modem工作.生产modem的厂家有很多:Qualcomm, STE, Infineon... 不同的厂家都有各自的特点,当然也会有各自 ...

  2. Vex – 超轻量!可以轻松自定义的现代风格弹窗插件

    Vex 的独特之处在于现代风格设计,能够自定义弹出模式.皮肤.Vex 超轻量,压缩后不到 2KB,提供了简洁的 API,可以根据自己的项目需要快速自定义.支持在移动设备上使用,测试通过的浏览器:IE8 ...

  3. 使用MinGW 编译 iconv 库

    原文链接: http://www.code-by.org/viewtopic.php?f=54&t=166 GNU页面 http://ftp.gnu.org/pub/gnu/libiconv/ ...

  4. 【UWP】对 Thickness 类型属性进行动画

    好几个月没写 blog 了,一个是在忙新版的碧影壁纸,另一方面是等(观望)周年更新的 api(不过现在还是比较失望,仍然没法支持矩形以外的 Clip).闲话少说,进入主题. 在 UWP 中,出于性能考 ...

  5. edittext 监听内容变化

    给EditText追加ChangedListener可以监听EditText内容变化的监听 如图是效果图  类似于过滤的一种实现 1  布局也就是一个EditText,当EditText内容发生变化时 ...

  6. 多准则决策模型-TOPSIS评价方法-源码

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

  7. Genymotion Shell命令

    命令行选项 •-h 输出帮助信息 •-r ip_address 连接到特定Genymotion虚拟设备 •-c "command" 在原生shell环境中执行给定命令而后返回 •- ...

  8. eclipse easyexplorer openexplorer

    电脑重装了.. eclipse换成了4.4.2,发现原来的easyexplorer不生效了(原来是4.2),搜了下,换成了open explorer即可. 方式一样,都是丢到eclipse/plugi ...

  9. 西邮Linux兴趣小组2016免试题

    4.28的宣讲会圆满结束(就在写这段话之前不久),对于西邮Linux兴趣小组这一次纳新,身为局外人表示:还是有历史,还是会玩,还是厉害哈. 华丽的分割线里面是自己之前的攻关战略,最后补充了宣讲会上学长 ...

  10. [CLK Framework] CLK.Threading.PortableTimer - 跨平台的Timer类别

    [CLK Framework] CLK.Threading.PortableTimer - 跨平台的Timer类别 问题情景 开发应用程式的时候,免不了需要加入一些定时执行的设计,例如说:定时更新画面 ...