码迷,mamicode.com
首页 > 编程语言 > 详细

Add Two Numbers - C++链表操作

时间:2015-06-26 21:03:04      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

题目意思很简单,两个链表分别表示两个数,将两个数相加的结果存入一个新的链表中。

思路同样很简单:两个链表如果一样长,对应位置相加,如果某一个链表多了,则根据加的结果有无进位继续处理,全部结束后要考虑会不会还剩进位。

c++的链表,题目已经给了一个挺好的例子:

struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
};

对于创建链表可以使用一个头节点来一直指向这个链表,头节点中没有数据

ListNode *l1,*l1head;
l1=new ListNode(0);
l1head=l1;

for(int i=0;i<n;i++)
{
    scanf("%d",&temp);
    ListNode *tempnode=new ListNode(temp);
    l1->next=tempnode;
    l1=l1->next;
}

接下来直接进行比较,情况考虑周全即可,比较危险的数据有

[5],[5] ; [1],[99] 

技术分享
 1 class Solution {
 2 public:
 3     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
 4         ListNode *res, *head;
 5         res = new ListNode(0);
 6         head = res;
 7         int flag = 0;
 8         while (l1 != NULL && l2 != NULL) {
 9             ListNode *tempNode = new ListNode(0);
10             int temp = l1->val + l2->val + flag;
11             if (temp >= 10) {
12                 flag = 1;
13                 tempNode->val = temp % 10;
14             } else {
15                 flag = 0;
16                 tempNode->val = temp;
17             }
18 
19             l1 = l1->next;
20             l2 = l2->next;
21             res->next = tempNode;
22             res = res->next;
23         }
24         while (l1 != NULL) {
25             ListNode *tempNode = new ListNode(0);
26 
27             if (flag == 1) {
28 
29                 tempNode->val = l1->val + flag;
30                 if (tempNode->val >= 10) {
31                     flag = 1;
32                     tempNode->val = tempNode->val % 10;
33                 } else {
34                     flag = 0;
35                 }
36                 l1 = l1->next;
37                 res->next = tempNode;
38                 res = res->next;
39             } else {
40                 res->next = l1;
41                 break;
42             }
43 
44         }
45         while (l2 != NULL) {
46             ListNode *tempNode = new ListNode(0);
47 
48             if (flag == 1) {
49 
50                 tempNode->val = l2->val + flag;
51                 if (tempNode->val >= 10) {
52                     flag = 1;
53                     tempNode->val = tempNode->val % 10;
54                 } else {
55                     flag = 0;
56                 }
57                 l2 = l2->next;
58                 res->next = tempNode;
59                 res = res->next;
60             } else {
61                 res->next = l2;
62                 break;
63             }
64 
65         }
66         if (flag == 1) {
67             ListNode *tempNode = new ListNode(1);
68             res->next = tempNode;
69         }
70         return head->next;
71     }
72 };
Add Two Numbers

PS :

调用和返回都使用了p->next的方式,因为没有把头指针传进去。

 

Add Two Numbers - C++链表操作

标签:

原文地址:http://www.cnblogs.com/holyprince/p/4603126.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!