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 ,请你删除所有重复的元素,使每个元素 只出现一次 . 返回同 ...
随机推荐
- Ax用Excel导出表的字段属性信息
static void CKT_ExportTableColnum(Args _args){ LJD_QaHalf_Figure _LJD_QaHalf_Figure; SysDictTable sd ...
- Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again
虚拟机恢复快照后,使用yum安装软件,提示下面的信息,开始以为是yum源的问题或者DNS的问题,但是无果,最后再看一下服务器的时间,坑了,还原快照,时间变成以前的了. [root@localhost ...
- JavaScript 教程
JavaScript 教程:https://code.ziqiangxuetang.com/js/js-tutorial.html
- python3 第三十四章 - 聊聊File对象
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 序号 方法及描述 实例 1 file.close() 关闭文件.关闭后文件不能再进行读写操作. 方法用于关闭一个已打 ...
- C++重载Level蓝图
一.从ALevelScriptActor派生自己的类,添加功能并编译. 二.在编辑器中打开level blueprint,然后class default选项卡中,在细节面板中Parent class选 ...
- 初识“FireBug”
今天学习前端知识又一次提到“FireBug”这款插件,现在,把今天学到的一点东西简单记录下来. 什么是FireBug FireBug是一个用于网站前端开发的工具,它是FireFox浏览器的一个扩展插件 ...
- 分别求二叉树前、中、后序的第k个节点
一.求二叉树的前序遍历中的第k个节点 //求先序遍历中的第k个节点的值 ; elemType preNode(BTNode *root,int k){ if(root==NULL) return ' ...
- PHP配置文件详解php.ini
[PHP] ; PHP还是一个不断发展的工具,其功能还在不断地删减 ; 而php.ini的设置更改可以反映出相当的变化, ; 在使用新的PHP版本前,研究一下php.ini会有好处的 ;;;;;;;; ...
- 适用于 iOS、Android 和 Windows 设备的移动设备管理
适用于 iOS.Android 和 Windows 设备的移动设备管理 随着企业环境中移动设备的数量不断增加,详细检查访问您企业资源的移动设备变得至关重要.统一终端管理软件 Desktop Centr ...
- selenium3+python3.6爬页面源码的代码
from selenium import webdriver import unittest,time class my_test(unittest.TestCase): def setUp(self ...