码迷,mamicode.com
首页 > 其他好文 > 详细

单链表实现大数相加

时间:2019-09-08 22:09:34      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:namespace   pac   mes   clu   get   col   parent   nbsp   node   

字节跳动面试题:

两个数为正数。

用链表求和:

现场写的时候出了几个bug实在尴尬。。。

样例一

2 3 4 5
4 5 6
2 8 0 1

样例二

9 9 9
9 9 9
1 9 9 9

 

 

  1 #include <iostream>
  2 using namespace std;
  3 
  4 struct List{
  5     int val;
  6     List * next;
  7 };
  8 
  9 List* insert(List *node, int val){
 10     List *root = node;
 11     if(node == NULL){
 12         // cout << "!!" << endl;
 13         node = new List();
 14         root = node;
 15         node->val = val;
 16         node->next = NULL;
 17     }else{
 18         while(node->next != NULL){
 19             node = node->next;
 20         }
 21         List * an = new List();
 22         an->val = val;
 23         an->next = node->next;
 24         node->next = an;
 25     }
 26     return root;
 27 }
 28 
 29 void print(List *an){
 30     while(an != NULL){
 31         cout << an->val<<" ";
 32         an = an->next;
 33     }
 34     cout << endl;
 35 }
 36 
 37 
 38 List * become(List *node){
 39     if(node == NULL) return NULL;
 40     List *pnext = NULL;
 41     List *parent = NULL;
 42     while(node != NULL){
 43         pnext = node->next;
 44         node->next = parent;
 45         parent = node;
 46         node = pnext;
 47     }
 48     return parent;
 49 }
 50 
 51 List * getsum(List *a, List *b){
 52     List *an = become(a);
 53     List *bn = become(b);
 54     List *cn = new List();
 55     int flag = 0;
 56     while(an != NULL && bn!=NULL){
 57         List *cnt = new List();
 58         cnt->val= (an->val + bn->val + flag)%10;
 59         if((an->val + bn->val + flag)>=10)
 60             flag = 1;
 61         else
 62             flag = 0;
 63         cnt->next = cn->next;
 64         cn->next = cnt;
 65         an = an->next;
 66         bn = bn->next;
 67     }
 68     while(an != NULL){
 69         List *cnt = new List();
 70         if((an->val + flag)>=10)
 71             flag = 1;
 72         else
 73             flag = 0;
 74         cnt->val= (an->val + flag)%10;
 75         cnt->next = cn->next;
 76         cn->next = cnt;
 77         an = an->next;
 78     }
 79     while(bn != NULL){
 80         List *cnt = new List();
 81         if((bn->val + flag)>=10)
 82             flag = 1;
 83         else
 84             flag = 0;
 85         cnt->val= (bn->val + flag)%10;
 86         cnt->next = cn->next;
 87         cn->next = cnt;
 88         bn = bn->next;
 89     }
 90     if(flag == 1){
 91         List *cnt = new List();
 92         cnt->val= 1;
 93         cnt->next = cn->next;
 94         cn->next = cnt;
 95     }
 96     return cn->next;
 97 }
 98 
 99 
100 int main() {
101     string s;
102     getline(cin, s);
103     List *a = NULL, *b = NULL;
104     int cnt = 0;
105     s +=  ;
106     for(int i = 0; i < s.length(); i++){
107         if(isdigit(s[i])){
108             cnt = cnt*10 + s[i]-0;
109         }else{
110             a = insert(a, cnt);
111             cnt = 0;
112         }
113     }
114     getline(cin, s);
115     cnt = 0;
116     s +=  ;
117     for(int i = 0; i < s.length(); i++){
118         if(isdigit(s[i])){
119             cnt = cnt*10 + s[i]-0;
120         }else{
121             b= insert(b, cnt);
122             cnt = 0;
123         }
124     }
125     List * node = getsum(a,b);
126     print(node);
127     return 0;
128 }

 

单链表实现大数相加

标签:namespace   pac   mes   clu   get   col   parent   nbsp   node   

原文地址:https://www.cnblogs.com/zllwxm123/p/11488429.html

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