LeetCode: 2_Add Two Numbers | 两个链表中的元素相加 | Medium
题目:
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
解题思路:
两个链表中的元素相加相比普通的加法操作增加了一个层次,和两个数组中的元素相加意义上差不多,这个题可以引申到大数相加上。需要注意的是:进位的处理。
代码展示:
1 #include <iostream>
2 #include <cassert>
3
4 using namespace std;
5
6
7 //Definition for singly-linked list.
8 struct ListNode {
9 int val;
10 ListNode *next;
11 ListNode(int x) : val(x), next(NULL) {}
12 };
13
14 ListNode * insertNodes(int n)
15 {
16 ListNode *pNode = new ListNode(0);
17 ListNode *p = pNode;
18 int i = 0;
19 int m;
20 while(i < n) {
21 cin >> m;
22 ListNode *pIn = new ListNode(m);
23 p->next = pIn;
24 p = pIn;
25
26 i++;
27 }
28 return pNode->next;
29 }
30
31 void Print(ListNode *p)
32 {
33 ListNode *pT = p;
34 while(NULL != pT) {
35 cout << pT->val << " ";
36 pT = pT->next;
37 }
38 }
39
40 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
41 {
42 assert(NULL != l1);
43 assert(NULL != l2);
44
45 ListNode *pRetNode = new ListNode(0);
46 ListNode *p = pRetNode;
47
48 int div = 0;
49 int nSumVal;
50 while (NULL != l1 || NULL != l2) {
51 int val1 = 0, val2 = 0;
52 if (NULL != l1) {
53 val1 = l1->val;
54 l1 = l1->next;
55 }
56 if (NULL != l2) {
57 val2 = l2->val;
58 l2 = l2->next;
59 }
60 nSumVal = val1 + val2 + div; //一个比较巧妙的进位相加的方式
61 div = nSumVal/10;
62 ListNode *pT = new ListNode(nSumVal%10);
63 p->next = pT;
64 p = pT;
65 }
66 if (div) {
67 p->next = new ListNode(div);
68 }
69 return pRetNode->next;
70 }
71
72 // int main()
73 // {
74 // ListNode *p1 = insertNodes(1);
75 // ListNode *p2 = insertNodes(4);
76 // ListNode *p = addTwoNumbers(p1,p2);
77 // Print(p);
78 // return 0;
79 // }
LeetCode: 2_Add Two Numbers | 两个链表中的元素相加 | Medium的更多相关文章
- Java实现 LeetCode 24 两两交换链表中的节点
24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...
- 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II
[算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...
- leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表
24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...
- 【LeetCode】24.两两交换链表中的节点
24.两两交换链表中的节点 知识点:链表 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 示例 1 ...
- [LeetCode] Add Two Numbers 两个数字相加
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- LeetCode-024-两两交换链表中的节点
两两交换链表中的节点 题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例说明请见LeetCode官网. 来源:力 ...
- lintcode-451-两两交换链表中的节点
451-两两交换链表中的节点 给一个链表,两两交换其中的节点,然后返回交换后的链表. 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3. ...
- NO.24两两交换链表中的节点
NO.24两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例:给定 1->2->3-&g ...
- 【python】Leetcode每日一题-删除排序链表中的重复元素
[python]Leetcode每日一题-删除排序链表中的重复元素 [题目描述] 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 . 返回同 ...
随机推荐
- 常用Linux VPS/服务器SSH连接工具 - Xshell下载与使用
我们很多网友可能初次接触Linux VPS.服务器,所以在购买完毕VPS主机不知道如何登录.有些网友甚至直接类似WIN系统一样直接在桌面远程连接工具连接,可想而知肯定是无法连接的.因为如果我们购买的是 ...
- 设计模式学习心得<适配器 Adapter>
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接 ...
- 【转载】http proxy原理
最近使用Charles抓https包时,发现get和post方式的请求都能抓到,但是method为connect的就是抓不到.而且提示如下: You may need to configure you ...
- java数据结构至对称矩阵压缩存储
刚刚刷java选择题,遇到的对称矩阵压缩存储问题,我们知道对称矩阵是aij=aji的矩阵,压缩存储可以采用一维数组和二维数组存储. 此处只讨论一维数组存储的形式,设数组下标从0开始,对称矩阵为n维矩阵 ...
- C# 互通操作 (二)基础知识1
[DllImport("user32.dll", EntryPoint = "MessageBox")] public static extern int De ...
- dubbo入门学习 五 provider端的编写
1. 新建Maven Project, 里面只有接口(dubbo-service) 1.1 为什么这么做? RPC框架,不希望Consumer知道具体实现.如果实现类和接口在同一个项目中,Consum ...
- GitHub学习途径
之前学习GitHub的一个pdf文件 作者是stormzhang 我觉得那个pdf教的很详细,我还没看完,正在学习中,学到了文件的clon和在本机如何更新GitHub的文件. 在此分享一下 下载链接h ...
- npm安装cnpm、vue、react
安装cnpmnpm install -g cnpm --registry=https://registry.npm.taobao.org 安装vuecnpm install --global vue- ...
- 神经网络参数与TensorFlow变量
在TensorFlow中变量的作用是保存和更新神经网络中的参数,需要给变量指定初始值,如下声明一个2x3矩阵变量 weights =tf.Variable(tf.random_normal([2,3] ...
- U盘安装centos7 关键步骤
出现安装界面 按tab键或e键进行修改 一般默认第二行为: vmlinuz intrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd ...