LeetCode刷题记--第二题--C语言
作者:互联网
题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解答:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p=NULL,*q=l1,*r=l2;
struct ListNode *head=NULL,*temp=NULL;
p = (struct ListNode *)malloc(sizeof(struct ListNode));
if(p == NULL)
return NULL;
p->next =NULL;
p->val = -1;
int sum=0;
int up_flag=0,start_flag=0;//up_flag进位标志,start_flag头指针标志
while(1)
{
if(q!=NULL && r!=NULL)
{
temp = (struct ListNode *)malloc(sizeof(struct ListNode));
if(temp == NULL)
return NULL;
sum = q->val + r->val + up_flag;
temp->val = sum % 10;
temp->next = NULL;
up_flag = sum / 10;
p->next = temp;
p = p->next;
if(start_flag==0)
{
head = p;
start_flag = 1;
}
q=q->next;
r=r->next;
}
else if(q==NULL && r!=NULL)
{
if(up_flag==0)
{
if(start_flag==0)
{
head = r;
break;
}
else
{
p->next = r;
break;
}
}
else
{
temp = (struct ListNode *)malloc(sizeof(struct ListNode));
if(temp == NULL)
return NULL;
sum = r->val + up_flag;
temp->val = sum % 10;
temp->next = NULL;
up_flag = sum / 10;
p->next = temp;
p = p->next;
r= r->next;
}
}
else if(r==NULL && q!=NULL)
{
if(up_flag==0)
{
if(start_flag==0)
{
head = q;
break;
}
else
{
p->next = q;
break;
}
}
else
{
temp = (struct ListNode *)malloc(sizeof(struct ListNode));
if(temp == NULL)
return NULL;
sum = q->val + up_flag;
temp->val = sum % 10;
temp->next = NULL;
up_flag = sum / 10;
p->next = temp;
p = p->next;
q= q->next;
}
}
else if(r==NULL && q==NULL)
{
if(up_flag==0)
break;
else
{
temp = (struct ListNode *)malloc(sizeof(struct ListNode));
if(temp == NULL)
return NULL;
sum = up_flag;
temp->val = sum % 10;
temp->next = NULL;
up_flag = sum / 10;
p->next = temp;
p = p->next;
}
}
}
return head;
}
标签:ListNode,C语言,temp,next,flag,题记,NULL,LeetCode,struct 来源: https://blog.csdn.net/m0_37967533/article/details/88084854