445. Add Two Numbers II
来源:互联网 发布:机械加工工艺编制软件 编辑:程序博客网 时间:2024/05/16 12:30
You are given two non-empty linked lists representing two
non-negative integers. The most significant digit comes first and
each of their nodes contain a single digit. Add the two numbers and
return it as a linked list.You may assume the two numbers do not contain any leading zero,
except the number 0 itself.Follow up: What if you cannot modify the input lists? In other words,
reversing the lists is not allowed.Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 8 -> 0 -> 7
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */int getListLength(const struct ListNode *l){ struct ListNode *pNode = l; int count = 0; while(pNode){ count++; pNode = pNode->next; } return count;}int addTwoNumbers_1(struct ListNode *l1,int len1,struct ListNode *l2,int len2){ int carry = 0; int sum = 0; if(len1 == 0 || len2 == 0|| l1 == NULL || l2 == NULL){ return 0; } if(len1>len2){ carry = addTwoNumbers_1(l1->next,len1-1,l2,len2); sum = carry + l1->val; l1->val = sum%10; } if(len1 == len2){ carry = addTwoNumbers_1(l1->next,len1-1,l2->next,len2-1); sum = carry + l1->val + l2->val; l1->val = sum%10; } if(len1<len2){ carry = addTwoNumbers_1(l1,len1,l2->next,len2-1); sum = carry + l2->val; l2->val = sum%10; } carry = sum/10; return carry;}struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { int len1 = 0; int len2 = 0; int carry = 0; struct ListNode *pNode = NULL; struct ListNode *head = NULL; len1 = getListLength(l1); len2 = getListLength(l2); if(len1>len2){ carry = addTwoNumbers_1(l1,len1,l2,len2); pNode = l1; } if(len1<=len2){ carry = addTwoNumbers_1(l2,len2,l1,len1); pNode = l2; } if(carry>0){ head = (struct ListNode *)malloc(sizeof(struct ListNode)); head->val = carry; head->next = pNode; pNode = head; } return pNode;}
/*java solution using stack*/public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { Stack<Integer> s1 = new Stack<Integer>(); Stack<Integer> s2 = new Stack<Integer>(); while(l1 != null) { s1.push(l1.val); l1 = l1.next; }; while(l2 != null) { s2.push(l2.val); l2 = l2.next; } int sum = 0; ListNode list = new ListNode(0); while (!s1.empty() || !s2.empty()) { if (!s1.empty()) sum += s1.pop(); if (!s2.empty()) sum += s2.pop(); list.val = sum % 10; ListNode head = new ListNode(sum / 10); head.next = list; list = head; sum /= 10; } return list.val == 0 ? list.next : list; }}
阅读全文
0 0
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II**
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II。
- 445. Add Two Numbers II
- (练习)I/O文件流处理
- JEESZ-Redis分布式缓存安装和使用
- openstack shaker-image的build
- 三款摄像头设备URL总结
- Intent 能传递的数据类型
- 445. Add Two Numbers II
- 贝叶斯分类
- Java小程序之随机最大值最小值
- 主成分分析(PCA)
- Hello Mr.J——Docker
- 谈谈你对Activity生命周期的理解
- ABAP--如何在打印报表上打印水印
- 设计模式之抽象工厂模式
- 两种方法实现MFC 对话框最大化时控件也随比例最大化或者还原