leetcode 2. Add Two Numbers
来源:互联网 发布:ubuntu 更改时区 编辑:程序博客网 时间:2024/04/27 23:17
1.题目描述
Total Accepted: 111540 Total Submissions: 513925 Difficulty: Medium
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
求两个链表的和,数字都是以倒序存储的,得出的和也用倒序存储。
2.分析
思路一:
遍历两个链表节点,每个节点的值相加,用carry存储进位。
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { int carry=0; struct ListNode* head = NULL; struct ListNode* tail = NULL; while(l1 || l2) { struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode)); if(l1!= NULL && l2!= NULL) { new_node->val = (l1->val+l2->val+carry)%10; carry = (l1->val+l2->val+carry)/10; l1 = l1->next; l2 = l2->next; } else if(l1 == NULL) { new_node->val = (l2->val+carry)%10; carry = (l2->val+carry)/10; l2 = l2->next; } else if(l2 == NULL) { new_node->val = (l1->val+carry)%10; carry = (l1->val+carry)/10; l1 = l1->next; } new_node->next = NULL; if(head == NULL) { head = new_node; tail = head; } else { tail->next = new_node; tail = tail->next; } } if(carry) { struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode)); new_node->val = 1; new_node->next = NULL; tail->next = new_node; tail = tail->next; } return head;}这是之前写的代码,现在看来真是太不简洁了。优化后的代码如下:
class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* head = new ListNode(-1), *cur = head; int carry = 0; while(l1 || l2 || carry){ int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry; carry = sum / 10; cur->next = new ListNode(sum % 10); cur = cur->next; if(l1) l1 = l1->next; if(l2) l2 = l2->next; } return head->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
- Android应用共享数据被回收解决办法
- cf#336-B-Hamming Distance Sum
- nginx配置防盗链
- Unity3d 读写txt
- Linux zip命令
- leetcode 2. Add Two Numbers
- 在windows下配置pthread
- Base64String
- 求int型数据在内存中存储时1的个数
- 安卓核心组件三ContentProvider
- ambari高级操作
- 18.shell脚本编程(3)
- 迈步从头越
- UISearchBar协议常用方法