Leetcode 2, Add Two Numbers, 难度medium。
这是一个把数字逆序相加的题目,把数字按照逆序放置省去了考虑最低位对齐的问题,只要把每一个节点里面的数加起来判断是否下一位需要进位然后修改carry标识,最后将数除十取余放入新的链表节点中。并且需要判断两个链表是否为空,看了discuss发现自己写的确实啰嗦了,只需要一个三元表达式就可以了。
以下是代码:
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* res = new ListNode(0);
ListNode* begin = res;
bool carry = 0;
while(l1 != NULL || l2 != NULL || carry) {
int num = 0;
if(l1 != NULL && l2 != NULL) {
num = l1 -> val + l2 -> val;
}
if(l1 == NULL && l2 != NULL) {
num = l2 -> val;
}
if(l2 == NULL && l1 != NULL) {
num = l1 -> val;
}
if(carry) num++;
if(num >= 10) carry = 1;
else carry = 0;
num %= 10;
begin -> val = num;
if(l1 != NULL) l1 = l1 -> next;
if(l2 != NULL) l2 = l2 -> next;
if(l1 != NULL || l2 != NULL || carry) {
ListNode* temp = new ListNode(0);
begin -> next = temp;
begin = begin -> next;
}
}
return res;
}
};