代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
struct ListNode* top;
struct ListNode* toptop;
struct ListNode* end;
struct ListNode* pl1;
struct ListNode* pl2;
int flag = 0;//进位标志
int add;//相加之和
//顶部初始化
top = (struct ListNode*)malloc(sizeof(struct ListNode));
end = top;
top->val = 0;
top->next = NULL;
//搜寻指针指向两链表头节点
pl1 = l1;
pl2 = l2;
while(pl1 || pl2)
{
//l1达到末尾
if(pl1==NULL)
{
add = pl2->val;
}
//l2达到末尾
else if(pl2==NULL)
{
add = pl1->val;
}
//都没达到末尾
else if(pl1 != NULL && pl2 != NULL)
{
add = pl1->val + pl2->val;
}
if(flag == 1)
{
add += flag;
flag = 0;
}
if(add >= 10)
{
flag = 1;
add = add%10;
}
toptop = top;
top = (struct ListNode*)malloc(sizeof(struct ListNode));
toptop->next = top;
top->val = add;
top->next = NULL;
toptop = top;
if(pl1 != NULL)
{
pl1 = pl1->next;
}
if(pl2 != NULL)
{
pl2 = pl2->next;
}
if(pl1 != NULL && pl2 == NULL && flag == 0)
{
top->next = pl1;
return end->next;
}
if(pl2 != NULL && pl1 == NULL && flag == 0)
{
top->next = pl2;
return end->next;
}
}
if(flag == 1)
{
toptop = top;
top = (struct ListNode*)malloc(sizeof(struct ListNode));
toptop->next = top;
top->val = flag;
top->next = NULL;
toptop = top;
}
return end->next;
}