您的位置:首页 > 其它

leetcode解题报告2. Add Two Numbers

2017-02-25 20:07 375 查看

leetcode解题报告2. Add Two Numbers

题目地址

难度是medium

题目描述

用单链表来表示一个大整数,其中单链表的每个节点只有一个数0~9。给两个这样单链表表示的整数,求它们的和(还是用单链表表示)

我的思路

题目比较难看懂,刚开始还以为只是把单链表对应节点相加而已,没想到是把单链表看着一个整数相加,这样的话,要考虑进位了。

理解题目之后就不难了,难点在于

1. 单链表的操作(考验数据结构知识)

2. 各种情况的考虑,比如两个列表的长度不一样,再比如,在最后一位相加后,还有进位等情况。

我的代码

/**
* 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* head = new ListNode(0);
ListNode* cur = head;
short flag = 0; //进位标示
//注意可能l1和l2的长度不一定一样
while (l1 != NULL || l2 != NULL) {
int lv1, lv2;
if (l1 == NULL) {
lv1 = 0;
} else {
lv1 = l1->val;
l1 = l1->next;
}
if (l2 == NULL) {
lv2 = 0;
} else {
lv2 = l2->val;
l2 = l2->next;
}
short v = lv1 + lv2 + flag; //优化点,因为数字范围是0到9,用short就好
flag = v / 10;
v = v % 10;
cur->next = new ListNode(v);
cur = cur->next;
}
//处理最后一位相加之后的进位
if (flag > 0) {
cur->next = new ListNode(flag);
}
return head->next;
}
};


阅读官方题解
4000

官方题解

基本和我想的差不多。

思想核心总结

看懂题目要求,不要理解错了

注意各种特殊情况

熟练链表的操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: