if(l2!=NULL){pre1->next=l2;pre2->next=NULL;)

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

注意最后是否需要生成一个节点。

解法一:利用原有的list,最多new一个节点。

 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* pre1, *pre2, *head=l1;
14         int a=0;
15         int re=0;
16         bool flag=false;
17         while(l1!=NULL&&l2!=NULL)
18         {
19             
20             re=(l1->val+l2->val+a)%10;
21             a=(l1->val+l2->val+a)/10;
22             l1->val=re;
23             pre2=l2;
24             pre1=l1;
25             l1=l1->next;
26             l2=l2->next;
27         }
28         if(l2!=NULL)
29         {
30             pre1->next=l2;
31             pre2->next=NULL;
32             flag=true;
33         }
34         while(l1!=NULL)
35         {
36             re=(a+l1->val)%10;
37             a=(a+l1->val)/10;
38             l1->val=re;
39             pre1=l1;
40             l1=l1->next;
41         }
42         while(l2!=NULL)
43         {
44             re=(a+l2->val)%10;
45             a=(a+l2->val)/10;
46             pre2=l2;
47             l2->val=re;
48             l2=l2->next;
49         }
50         if(a!=0)
51         {
52         ListNode* last=new ListNode(a);
53         if(flag)
54         pre2->next=last;
55         else
56         pre1->next=last;
57         }
58         
59         return head;
60         
61     }
62 };

 

解法二:把结果放到一个全新的list中去。(略)

转载于:https://www.cnblogs.com/hicandyman/p/3826956.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值