leetcode Add Two Numbers
来源:互联网 发布:淘宝运费险黑名单查询 编辑:程序博客网 时间:2024/06/12 00:11
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
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
很简单的基于链表的加法,这种算法常用于大整数的加法
class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *temp1,*temp2,*result,*head,*pnext; temp1 = l1; temp2 = l2; pnext=result = head = NULL; bool carry = false; if(l1 == NULL || l2 == NULL) return head; while(temp1 != NULL && temp2 != NULL) { pnext = new ListNode(0); int sum = temp1->val+temp2->val; if(carry == true) { sum += 1; carry =false; } if(sum >= 10) { pnext->val = sum%10; carry =true; } else { pnext->val = sum; carry =false; } if(result == NULL) { head = result = pnext; } else { result->next = pnext; result = pnext; } temp1 = temp1->next; temp2 = temp2->next; } while(temp1 != NULL) { pnext = new ListNode(0); if(carry == true) { pnext->val = (temp1->val+1)%10; if(temp1->val+1 >= 10) carry =true; else carry = false; } else { pnext->val = temp1->val; } temp1 = temp1->next; result->next = pnext; result = pnext; } while(temp2 != NULL) { pnext = new ListNode(0); if(carry == true) { pnext->val = (temp2->val+1)%10; if(temp2->val+1 >= 10) carry =true; else carry = false; } else { pnext->val = temp2->val; } temp2 = temp2->next; result->next = pnext; result = pnext; } if(carry == true) { pnext = new ListNode(1); result->next = pnext; } return head; }};
改进方法将两个链表分别转换为对应的长整数num1,num2(虽然长整数很大,但仍然存在溢出风险),然后求出两个长整数的和sum,然后再将sum转换为对应的链表
class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { long num1=0; long num2=0; long mult = 1; long sum=0; ListNode *temp1,*temp2,*result,*head,*pnext; temp1 = l1; temp2 = l2; head = result =pnext=NULL; while(temp1!=NULL) { num1 += temp1->val*mult; mult *= 10; temp1 = temp1->next; } mult = 1; while(temp2!=NULL) { num2 += temp2->val*mult; mult *= 10; temp2 = temp2->next; } sum=num1+num2; if(sum == 0) { pnext = new ListNode(0); head =result = pnext; } else { while(sum != 0 ) { int val = sum%10; sum =sum/10; pnext = new ListNode(val); if(head == NULL) { head = result =pnext ; } else { result->next = pnext; result = pnext; } } } return head; }};
0 0
- LeetCode: Add Two Numbers
- LeetCode: Add Two Numbers
- [LeetCode]Add Two Numbers
- LeetCode Add Two Numbers
- Leetcode: Add Two Numbers
- LeetCode : Add Two Numbers
- LeetCode Add Two Numbers
- [LeetCode] Add Two Numbers
- Leetcode : Add Two Numbers
- 【leetcode】Add Two Numbers
- [LeetCode]Add Two Numbers
- leetcode Add Two Numbers
- LeetCode-Add Two Numbers
- [leetcode] Add Two Numbers
- [LeetCode] Add Two Numbers
- LeetCode - Add Two Numbers
- LeetCode | Add Two Numbers
- 【leetcode】Add Two Numbers
- Cocos2dx NotificationCenter(广播或通告)的使用方法
- ORACLE ORA-01653: unable to extend table 的错误(转)
- Python多线程下的变量问题
- 初学miniui之miniui的使用
- hibernate 注解说明
- leetcode Add Two Numbers
- Android软件开发之盘点界面五大布局
- Apache Commons工具集简介
- easyui获取datagrid所有行、变化行、更新行等数据的方法
- 关于.net控件的ID
- Android Studio系列教程四--Gradle基础
- hdu 1029 Ignatius and the Princess IV
- poj-3295 Tautology
- sql where 1=1和 0=1 的作用