两数相加
/**
* 解题思路:定义结果链表头结点,定义进位标志(0),开始循环,定义中间变量节点,
* 若两个链表均不为空,则两个链表对应元素相加再加上进位标志若大于10则取余并将进位标志置1,否则置0,将得到
* 结果赋予中间变量节点并加入结果链表中,若只有一个链表为空,则将不为空的那个链表元素加上进位标志若大于10则结果
* 取0进位标志置为1,否则进位标志置为0,结果赋予中间变量并加入结果链表中,当两个链表均为空时结束循环,结束循环后
* 判断进位标志是否为1,若为1则生成新节点值为1并加入结果链表中,返回结果链表(删去头结点)。
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *result = new ListNode();
ListNode *head = result;
int move = 0;
while(true){
ListNode *temp = new ListNode();
int s = 0;
if(l1 != nullptr && l2 != nullptr){
s = l1->val + l2->val + move;
l1 = l1->next;
l2 = l2->next;
}
else if(l1 == nullptr && l2 != nullptr){
s = l2->val + move;
l2 = l2->next;
}
else if(l1 != nullptr && l2 == nullptr){
s = l1->val + move;
l1 = l1->next;
}
else
break;
s >= 10 ? s = s % 10, move = 1 : move = 0;
temp->val = s;
result->next = temp;
result = result->next;
}
if(move == 1){
ListNode *temp = new ListNode(1);
result->next = temp;
}
result = head->next;
delete head;
return result;
}
};
我感觉这题是真不难,没多久就想出来了,而且一遍过,应该算一道easy的题才对,可能唯一容易错的就是别忘啦最后可能还有进位需要新生成一个节点添加上去。