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 ,请你删除所有重复的元素,使每个元素 只出现一次 . 返回同 ...
随机推荐
- Numpy 创建数组
ndarray 数组除了可以使用底层 ndarray 构造器来创建外, 也可以通过以下几种方式来创建. numpy.empty numpy.empty 方法用来创建一个指定形状(shape),数据类型 ...
- Java关键字this与super
this有两个用途: 1.引用隐式参数(出现在方法名前的参数,显示参数是出现在方法名后位于括号里的参数,如:e.raiseSalary(10%),e是隐式参数,10%是显示参数):这里比较常见.形式如 ...
- linux shell数组赋值方法(常用)
http://blog.csdn.net/shaobingj126/article/details/7395161 Bash中,数组变量的赋值有两种方法: (1) name = (value1 ... ...
- Codeforces 1091D New Year and the Permutation Concatenation 找规律,数学 B
Codeforces 1091D New Year and the Permutation Concatenation https://codeforces.com/contest/1091/prob ...
- 实战操作——通过wireshark查看任意qq好友IP
今天有群里好友问我如何查看别人IP,查IP这个东西对于一些刚入门的小白来说可能是一个比较高大上的玩意,但是实际上只需一个网络协议分析工具就OK,废话不多说,下面开始实践 实验对象:任意QQ好友 操作工 ...
- 小白的CTF学习之路3——二进制数据基础与运算(下)
处理了二进制的整数运算,下面我们来进行令人绝望的浮点数运算 我们先来看一下float事列程序: #include<"stdio.sh"> int main() { fl ...
- LOJ-10109(欧拉回路)
题目链接:传送门 思路: 就是简单的找欧拉回路,不过要注意dfs边时要将边的编号/2,不然会分不清那条边每被遍历. #include<iostream> #include<cstdi ...
- LwIP-网络接口管理
netif 各种类型网络接口的抽象------------------netif.c netif.h ————netif.h————————————————//网络接口最大物理地址长度,这 ...
- HDU 5355 Cake (构造 + 暴力)
题意:给定 n,m,让你把 1 ~ n 分成 m 部分,而且每部分和是一样大的. 析:首先先判断不能分成的,第一种是 sum (1 ~ n 的和)不能被 m 整除,或者 sum / m < n, ...
- Day03(黑客成长日记)------>元祖及列表的增减改查
#昨日作业解析: # s = 'sadagwa'# i = 0# while i < len(s):# s1 = s[i]# print(s1)# i += 1# while使用技巧,先找递增变 ...