标签:play 拓展 sdn filter handler val 空间 size aaa
这道题的条件判断很简单,如下:
1.是否为尾节点
2.是否产生进位
3.是否等于9
4.是否需要拓展空间
代码如下:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *p = l1, *q = l2;
int add, carry = 0;//carry标志进位
while (1) {
add = p->val + q->val + carry;
p->val = add % 10;
if (add > 9)carry = 1;
else carry = 0;
if (p->next == NULL || q->next == NULL)break;//直到最后一个节点
p = p->next;
q = q->next;
}
//这里就相当于是一个链表只有一个节点,另一个链表加上这个一个节点的数值
if (p->next) {//list1
p = p->next;
q = p;
while (carry) {//是否需要进位
if (q->val == 9) {//是否等于9
if (q->next == NULL) {//是否是最后一个节点
q->val = 0;
q->next = (ListNode*)malloc(sizeof(ListNode));
q->next->val = 1;
q->next->next = NULL;
break;
}
q->val = 0;
q = q->next;}
else {q->val++;carry = 0;}
}
return l1;
}
if (q->next) {//list2
q = q->next;
list2 = q;//
while (carry) {
if (q->val == 9) {
if (q->next == NULL) {
q->val = 0;
q->next = (ListNode*)malloc(sizeof(ListNode));
q->next->val = 1;
q->next->next = NULL;
break;
}
q->val = 0;
q = q->next;}
else {q->val++;carry = 0;}
}
p->next = l2;
return l1;
}
if (carry) {
q = (ListNode*)malloc(sizeof(ListNode));
q->next = NULL;
q->val = 1;
p->next = q;
}
return l1;
}
运行结果
个人总结:在设计算法初期,造成了许多代码的累赘,以上代码是经过优化后得到的。但是在这里两个if条件中还是会有代码的重复,但能够做出来我就已经很开心了。(^-^)V
【LeetCode】Add Two Numbers(两数相加)
标签:play 拓展 sdn filter handler val 空间 size aaa
原文地址:https://www.cnblogs.com/1000sakura/p/9972014.html