题目描述:给出两个链表,对两个链表中的数值进行加加
例如:输入 (2->4 ->3)+ (5->6->4)
输出(7->0->8)
/******************************
*Definition singly-linked list.
* struct ListNode{
* int val;
* struct ListNode *next;
* };
*******************************/
//满10 进位
void jinwei(struct ListNode *ll)
{
if(ll->val > 9)
{
if(ll->next == NULL) //当下一个链表为空时要动态分配
{
struct ListNode *temp = (struct ListNode *)malloc(sizeof(struct ListNode));
ll->next = temp;
temp->val = ll->val / 10;
temp->next = NULL;
}
else //当下一个链表不为空时要叠加,并递归调用
{
ll->next->val = ll->val / 10;
jinwei(ll->next);
}
ll->val = ll->val % 10;
}
}
//该函数功能是对传进来的两个链表的值进行相加
struct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2)
{
if(l1 == NULL) return l2;
if(l2 == NULL) return l1;
l1->val = l1->val + l2->val;
jinwei(l1);
l1->next = addTwoNumbers(l1->next, l2->next); //这里比较巧妙,因为函数最终是要返回头链表的头指针的,他这里一级级的返回,就能达到目的
return l1;
}
这道题展示了递归算法的解题过程。这些代码都是抄别人的然后自己在进行理解,以供达到学习的目的。