题目地址:https://leetcode-cn.com/problems/add-two-numbers/
解题思路:简单链表操作,注意判断链表的长度以及最高位进位的情况。
值得注意的几组样例
>>>[5] >>>[5] >>>[1,8] >>>[0] >>>[9,8] >>>[1] >>>[1] >>>[9,9] >>>[5] >>>[5]
遇到的问题:分配内存不能用new进行分配内存。原因是使用的是C编译器,而不是C++。
具体代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { struct ListNode *l, *p, *p1, *p2; p1 = l1; p2 = l2; l = (struct ListNode*)malloc(sizeof(struct ListNode)); p = l; int flag = 0;//进位标志符 while (p1 && p2 ) { p->next = (struct ListNode*)malloc(sizeof(struct ListNode)); p = p->next; int tmp = p1->val + p2->val + flag; if (tmp >= 10) { p->val = tmp % 10; flag = 1; } else { p->val = tmp; flag = 0; } p1 = p1->next; p2 = p2->next; } p->next = NULL; if (p1) p->next=p1; if (p2) p->next = p2; while(p->next){ p=p->next; if(flag){ p->val=p->val+1; if(p->val>=10){ p->val %=10; flag = 1; } else flag=0; } } //最高位 if (flag) { p->next = (struct ListNode*)malloc(sizeof(struct ListNode)); p = p->next; p->val = 1; p->next = NULL; } return l->next; }