思路
1.记录返回结构体
2.两个结构体的两位数相加,记录进位
3.位移结构体,赋值
代码
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p1 = l1;
struct ListNode *p2 = l2;
struct ListNode *result = (struct ListNode *)malloc(sizeof(struct ListNode));//设置返回的结构体
result->val = 0;
struct ListNode *p = NULL;//进度结构体,记录进度
int c = 0;
while(p1 != NULL || p2 != NULL || c != 0) {//判断结构体和进位,如果有,继续循环
if (p == NULL) {
p = result;
} else {
//位移记录结构体
p->next = (struct ListNode *)malloc(sizeof(struct ListNode));
p->next->val = 0;
p = p->next;
}
int a = (p1 == NULL ? 0 : p1->val);
int b = (p2 == NULL ? 0 : p2->val);
int s = (a + b + c) % 10;//当前结构体值
c = (a + b + c) / 10;//获取进位
p->val = s;
p->next = NULL;
p1 = (p1 == NULL ? NULL : p1->next);
p2 = (p2 == NULL ? NULL : p2->next);
}
return result;
}