这道题是LeetCode里的第2到题。
这道题的条件判断很简单,如下:
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
原文地址:https://www.cnblogs.com/1000sakura/p/9972014.html
时间: 2024-10-15 13:23:25