2.两数相加

注意事项:

1.两链表长度不等时,要处理较长链表剩余的结点和高位

2.链表对应结点相加时增加前一个结点的进位,并保存下一个结点的进位;除法得进位,模得结果

3.如果最高位计算时还产生进位,则还需要添加一个额外结点。

4.创建新节点时主要*

 1  1 /**
 2  2  * Definition for singly-linked list.
 3  3  * struct ListNode {
 4  4  *     int val;
 5  5  *     ListNode *next;
 6  6  *     ListNode(int x) : val(x), next(NULL) {}
 7  7  * };
 8  8  */
 9  9 class Solution {
10 10 public:
11 11     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
12 12         int carry = 0;
13 13         ListNode* result = NULL;  //注意*
14 14         ListNode* tmp = NULL;
15 15         while(l1 != NULL||l2 != NULL||carry != 0){
16 16             int sum = (l1 == NULL ? 0:l1->val) + (l2 == NULL ? 0:l2->val) + carry;  //注意判断列表是否为空
17 17             carry = sum / 10;
18 18             ListNode* node = new ListNode(sum % 10);  //创建新节点
19 19             if(tmp == NULL){      //判断是否为第一个结点
20 20                 tmp = node;
21 21                 result = tmp;
22 22             }else{
23 23                 tmp->next = node;
24 24                 tmp = tmp->next;
25 25             }   
26 26             l1 = l1 == NULL ? NULL : l1->next;    //注意判断是否到达链表结尾
27 27             l2 = l2 == NULL ? NULL : l2->next;
28 28         }
29 29         return result;
30 30     } 
31 31 };

 

posted @ 2019-10-01 12:08  thefatcat  阅读(152)  评论(0编辑  收藏  举报