ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【LeetCode刷题系列 - 002题】Add Two Numbers

2019-04-25 18:38:16  阅读:273  来源: 互联网

标签:ListNode num1 nullptr Two 002 Add l2 l1 newNode


题目:

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

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

代码(C++实现):

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
12         // 结果链表的首节点
13         ListNode *head = nullptr; 
14         // 尾插法建立单链表指向尾节点
15         ListNode *tail = nullptr; 
16         // num1为两整数相加后的个位数值
17         int num1 = 0;
18         // num2为两整数相加后的进位数值
19         int num2 = 0;
20         // node1Val为l1当前节点的数据域或者0
21         int node1Val = 0;
22         // node2Val为l2当前节点的数据域或者0
23         int node2Val = 0;
24         // count变量的设置是为了尾插法建立单链表设置的计数器
25         int count = 0;
26         
27         while(l1 != nullptr || l2 != nullptr)
28         {
29             // 如果节点不为空,则取节点的数据域否则让节点的数据域为0
30             if(l1 == nullptr)
31             {
32                 node1Val = 0;
33             }else
34             {
35                 node1Val = l1->val;
36             }
37             if(l2 == nullptr)
38             {
39                 node2Val = 0;
40             }else
41             {
42                  node2Val = l2->val;
43             }
44             // 本次计算结果 = 本次计算的node1Val + 本次计算的node1Va2 + 进位值
45             num1 = node1Val + node2Val + num2;
46             if(num1 >= 10)
47             {
48                 num1 = num1 - 10;
49                 num2 = 1;
50             }else
51             {
52                 num2 = 0;
53             }
54             // 为建立结果链表创建节点
55             ListNode *newNode = new ListNode(num1);
56             // 尾插法建立结果单链表,如果是首节点,需要进行特殊处理
57             if(count == 0)
58             {
59                 head = tail = newNode;
60             }else
61             {
62                 tail->next = newNode;
63                 tail = newNode;
64             }
65             // 链表向前移动并释放原始链表所占的内存空间
66             if(l1 != nullptr)
67             {
68                 ListNode *tempNode1 = l1;
69                 l1 = l1->next;
70                 delete tempNode1;
71             }  
72             if(l2 != nullptr)
73             {
74                 ListNode *tempNode2 = l2;
75                 l2 = l2->next;
76                 delete tempNode2;
77             }
78             
79             /* 为了解决例如情况:l1 = [5]  
80                               l2 = [5] 
81                这种情况
82             */
83             if(l1 == nullptr && l2 == nullptr && num2 != 0)
84             {
85                 ListNode *newNode = new ListNode(num2);
86                 tail->next = newNode;
87                 tail = newNode;
88                 return head;
89             }
90             count++;
91             
92         }
93     
94         return head;
95     }
96 };

 

标签:ListNode,num1,nullptr,Two,002,Add,l2,l1,newNode
来源: https://www.cnblogs.com/xuelisheng/p/10770215.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有