[Leetcode] 2.Add Two Numbers(List To Long,模拟)
来源:互联网 发布:coach淘宝代购 编辑:程序博客网 时间:2024/06/16 22:24
本题题意是指将两个数倒序存储在链表中,再将两数之和同样存储在链表中输出。
我最开始的思路是将每一位相加,再考虑是否进位,但这时就需要考虑一些情况,比较麻烦。
于是我决定采取另一种在网上新学到的方法:这个方法就是将链表中的数字串起来,当做一个long,例如2->4->5,可以根据题目具体要求转化成long型的542,再做后续的操作,就很容易了。
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 Solution10 {11 public:12 long ListToLong(ListNode* l)13 {14 long res = 0;15 long tem = 1;16 while(l)17 {18 res = res + l->val * tem;19 tem = tem * 10;20 l = l->next;21 }22 return res;23 }24 long get_n(long num)25 {26 long x = 10;27 long n = 1;28 while(num >= x)29 {30 n ++;31 x = x * 10;32 }33 return n;34 }35 void add(ListNode* l1, ListNode* l2)36 {37 while(l1->next)38 {39 l1 = l1->next;40 }41 l1->next = l2;42 }43 ListNode* LongToList(long num)44 {45 ListNode* res = new ListNode(-1);46 int n = get_n(num);47 //cout<<"n = "<<n<<endl;48 int x = 0;49 for(int i = 0;i < n;i ++)50 {51 x = num % 10;52 num = num / 10;53 ListNode* node = new ListNode(x);54 add(res,node);55 }56 return res->next;57 }58 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)59 {60 long num1 = ListToLong(l1);61 long num2 = ListToLong(l2);62 //cout<<"num1 = "<<num1<<" num2 = "<<num2<<endl;63 long num3 = num1 + num2;64 //cout<<"num3 = "<<num3<<endl;65 ListNode* res = LongToList(num3);66 return res;67 }68 };
但上面的代码提交后的结果很让我无语。。。见下图
只有两个示例没有通过。。。将long改成long long依旧不能通过,应该是特意添加的这两个示例,这种算法看来只能做到这步了。
于是我不得不回到最开始的思路,下面是AC代码
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 Solution10 {11 public:12 int M = 0;//表示进位13 ListNode* res = new ListNode(0);//结果链表14 int flag = 0;15 void add(ListNode* l1, ListNode* l2)16 {17 while(l1->next)18 {19 l1 = l1->next;20 }21 l1->next = l2;22 }23 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)24 {25 ListNode* temp = new ListNode(0);26 if(l1 == NULL && l2 == NULL)27 return res->next;28 else if(l1 == NULL)29 {30 temp->val = temp->val + M + l2->val;31 if(temp->val >= 10)32 {33 temp->val = temp->val - 10;34 M = 1;35 }36 else37 {38 M = 0;39 }40 ListNode* e1 = new ListNode(temp->val);41 add(res,e1);42 if(M && (l2->next == NULL))43 {44 ListNode* e3 = new ListNode(1);45 add(res,e3);46 }47 addTwoNumbers(NULL,l2->next);48 return res->next;49 }50 else if(l2 == NULL)51 {52 temp->val = temp->val + M + l1->val;53 if(temp->val >= 10)54 {55 temp->val = temp->val - 10;56 M = 1;57 }58 else59 {60 M = 0;61 }62 ListNode* e2 = new ListNode(temp->val);63 add(res,e2);64 if(M && (l1->next == NULL))65 {66 ListNode* e4 = new ListNode(1);67 add(res,e4);68 }69 addTwoNumbers(l1->next,l2);70 return res->next;71 }72 else73 {74 int x = l1->val + l2->val + M;75 if(x >= 10)76 {77 x = x - 10;78 M = 1;79 }80 else81 {82 M = 0;83 }84 ListNode* Node = new ListNode(x);85 add(res,Node);86 if(l1->next == NULL && l2->next == NULL && M == 1)87 {88 ListNode* e = new ListNode(1);89 add(res,e);90 }91 else92 {93 addTwoNumbers(l1->next,l2->next);94 }95 return res->next;96 }97 }98 };
阅读全文
0 0
- [Leetcode] 2.Add Two Numbers(List To Long,模拟)
- 2. Add Two Numbers leetcode(list)
- Leetcode - List - Add Two Numbers
- [leetcode][list] Add Two Numbers
- [leetcode][list] Add Two Numbers
- (链表) Add to List 2. Add Two Numbers
- LeetCode 2. Add Two Numbers(C++)
- LeetCode Add Two Numbers(用链表模拟加法)
- Linked List -- Leetcode problem 2. Add Two Numbers
- 445. Add Two Numbers II leetcode (list)
- [LeetCode]2.Add Two Numbers
- LeetCode 2.Add Two Numbers
- LeetCode --- 2. Add Two Numbers
- [Leetcode] 2. Add Two Numbers
- 【leetcode】2. Add Two Numbers
- leetcode 2. Add Two Numbers
- LeetCode-2.Add Two Numbers
- [leetcode] 2. Add Two Numbers
- [STL] vector基本用法
- linux每日一学
- 单例模式<静态内部类>
- [Leetcode] 1.Two Sum(unordered_map)
- [STL] map,multimap,unordered_map基本用法
- [Leetcode] 2.Add Two Numbers(List To Long,模拟)
- [BinaryTree] 二叉树类的实现
- [Leetcode] 3.Longest Substring Without Repeating Characters(unordered_map)
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- [Leetcode] 4.Median of Two Sorted Arrays
- linux搭建mysql集群服务负载均衡搭建java连接mysql集群
- 正则表达式 \w \d . \s常用字符的简写
- LeetCode难度和面试频率(转)
- 函数中的静态变量