二话不说直接上代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
//求链表长度
struct ListNode *p = l1;struct ListNode *q = l2;
struct ListNode * returnList = NULL;
struct ListNode *x = returnList;
struct ListNode * new_node = NULL;
int flag = 0,val1,result;
while(p&&q)
{
val1 = p->val+q->val+flag; //求得一个不超过20的二位数保留余数和进位
val1 = val1%10;
if(returnList==NULL)
{
returnList = (struct ListNode *)malloc(sizeof(struct ListNode));
returnList->next = NULL;
returnList->val = val1;
x = returnList;
}
else
{
new_node = (struct ListNode *)malloc(sizeof(struct ListNode));
new_node->val =val1;
new_node->next = NULL;
x->next = new_node;
x = new_node;
}
if(p->val+q->val+flag>=10) flag = 1;
else flag = 0;
p = p->next;q = q->next;
//赋值完成
}
//退出循环则说明链表执行长度执行完毕
//判断是哪个链表执行完毕
if(!p) //p链表执行完毕,q指向当前的节点
{
while(q)
{
new_node = (struct ListNode *)malloc(sizeof(struct ListNode ));
new_node->next = NULL;
x->next = new_node;
x = new_node;
val1 = q->val+flag;
if(val1>=10)
{
val1 = val1%10;
new_node->val = val1;
flag =1;
}
else
{
val1 = val1%10;
new_node->val = val1;
flag = 0;
}
q = q->next;
}
}
else if(!q)
{
while(p)
{
val1 = p->val+flag;
new_node = (struct ListNode *)malloc(sizeof(struct ListNode ));
new_node->next =NULL;
x->next = new_node;
x = new_node;
if(val1>=10)
{
val1 = val1%10;
new_node->val = val1;
flag =1;
}
else
{
val1 = val1%10;
new_node->val = val1;
flag = 0;
}
p = p->next;
}
}
//判断flag是否为1,如果为1说明进位还有冗余需要再加一个节点保存
if(flag==1)
{
new_node = (struct ListNode *)malloc(sizeof(struct ListNode ));
new_node->val = 1;
new_node->next =NULL;
x->next = new_node;
x = new_node;
return returnList;
}
else
{
return returnList;
}
return returnList;
}