/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers_2(struct ListNode* l1, struct ListNode* l2){
if (l2 == NULL&&l1->val==-1) return l2;
if (l2 == NULL)//保证下面使用l2节点不会出现空指针情况
{
struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
l2 = s;
s->next = NULL;
s->val = 0;
}
if (l1->val == -1) l1->val++;
l1->val += l2->val;
if (l1->val > 9)
{
l1->val -= 10;//超过10则减去
if (l1->next == NULL)//如果下一个节点为空需要申请节点存储数据元素
{
struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
l1->next = s;
s->next = NULL;
s->val = 1;//既然申请说明有进位直接设置为1
}
else//有下一个节点直接进位加一
{
l1->next->val++;
}
}
if (l1->next == NULL)//以l1为和的单链表则需要保证l2节点数量大于l1时l1有节点存在申请节点
{
struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
l1->next = s;
s->next = NULL;
s->val = -1;//初始值设置为-1以辨别是刚申请的节点区别于进位情况
}
addTwoNumbers_2(l1->next, l2->next);
if (l1->next->val == -1)//消除掉最后一个-1数据元素
{
l1->next = NULL;
}
return l2;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
addTwoNumbers_2(l1, l2);
return l1;//返回l1节点输出
}
两数相加--递归法
最新推荐文章于 2023-08-09 15:25:08 发布