LeetCode 2.Add Two Numbers
来源:互联网 发布:需要买车吗 知乎 编辑:程序博客网 时间:2024/04/28 06:37
题目:
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
一开始我想直接把两个链表顺序读出来构成数字然后相加,然后发现这个方法没法处理大数,其实这个题目就是解决大数相加的。所以还是采用链表逐节相加的方法。需要注意的是:
1.当某个链表为空的情况,直接返回另一个链表。
2.某两节相加大于10时就需要进位。
3.当两个链表均读取完毕之后,程序并不一定完成,需要判定最高位是否产生了进位,这个地方我一开始没想到,导致了WA。
/** * Add two numbers * by rickard * 2015.1.21 * 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) { //对空链表的判断 if((l1 == NULL) && (l2 == NULL)) return NULL; if(l1 == NULL)return l2; if(l2 == NULL)return l1; struct ListNode *temp1 = l1,*temp2 = l2; //头指针head和指向头指针的指针p struct ListNode headNode(0),*p=&headNode; int flag = 0;//进位符 int nodeVal = 0; while(!(temp1 == NULL && temp2 == NULL && flag == 0)) { //如果其中一个链表到尾了,就把另一个链表的后部整体复制给result if(temp1 == NULL && temp2 != NULL) { nodeVal = temp2 -> val + flag; temp2 = temp2->next; } else if(temp2 == NULL && temp1 != NULL) { nodeVal = temp1 -> val + flag; temp1 = temp1->next; } else if(temp1 == NULL && temp2 ==NULL && flag) { nodeVal = flag; flag = 0; } else { nodeVal = temp1->val + temp2->val + flag; temp1 = temp1 -> next; temp2 = temp2 -> next; } p -> next = new ListNode(0); if(nodeVal < 10) { p->next->val = nodeVal; flag = 0; } else { p->next->val = nodeVal%10; flag = 1; } p = p->next; } return headNode.next; }};
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { ListNode preHead(0), *p = &preHead; int extra = 0; while (l1 || l2 || extra) { int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra; extra = sum / 10; p->next = new ListNode(sum % 10); p = p->next; l1 = l1 ? l1->next : l1; l2 = l2 ? l2->next : l2; } return preHead.next;}
0 0
- [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
- 【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
- 2. Add Two Numbers LeetCode
- leetcode 2. Add Two Numbers
- LeetCode-2. Add Two Numbers
- LeetCode 2. Add Two Numbers
- 2. Add Two Numbers----LeetCode
- mysqldump --master-data
- 【java】枚举类实现接口
- Libvirt学习总结
- poj2195 Going Home 最小费用最大流
- Ruby—Mysql2::Error: Can't connect to MySQL server on '127.0.0.1' (61)
- LeetCode 2.Add Two Numbers
- CSS3 不使用javascript 实现click
- MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
- MFC立方体变色填充
- openstack nova基础知识——libvirt和qemu(2)
- mysql主从配置碰到的问题
- adb shell svc命令
- Java遇上MySQL
- Struts 三级联动