今天做了一个题,要建立一个链表。于是我先用malloc开辟了一个地址返回给两个相等的指针,打算将这两个一个设置为head作为函数的返回值,一个作为tail往后连接。但是最后返回head却得到的是tail,也就是只返回了链表尾节。请问这是怎么回事呢?
发下代码看看
具体是力扣第二题,两数之和。我的代码是这样的
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode*result=NULL,head=NULL;
int sum,num1,num2,carry=0;
head=result=(struct ListNode)malloc(sizeof(struct ListNode));
while(l1||l2){
int n1 = l1 ? l1->val : 0;
int n2 = l2 ? l2->val : 0;
int sum = n1 + n2 + carry;
carry=sum/10;
if(l1||l2){
result->val=sum%10;
}
result->next=NULL;
if(l1->next)
l1=l1->next;
else l1=NULL;
if(l2->next)
l2=l2->next;
else l2=NULL;
}
if(l1||l2){
result->next=malloc(sizeof(struct ListNode));
result=result->next;
}
if(carry){
result->next=malloc(sizeof(struct ListNode));
result=result->next;
result->val=carry;
result->next=NULL;
}
return head;
}
最后运行结果不是【7,0,8】而是【8】
代码修改如下,供参考:
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
struct ListNode*result=NULL,*head=NULL;
int sum=0,num1,num2,carry=0;
//head=result=(struct ListNode*)malloc(sizeof(struct ListNode));
while(l1||l2){
int n1 = l1 ? l1->val : 0;
int n2 = l2 ? l2->val : 0;
sum = n1 + n2 + carry; //int sum = n1 + n2 + carry;
carry = sum >= 10?sum/10:0;
if(head == NULL){
head=result=(struct ListNode*)malloc(sizeof(struct ListNode));
head->next = NULL; result->next = NULL;
result->val=sum%10;
}
else{
result->next=(struct ListNode*)malloc(sizeof(struct ListNode));
result->next->next = NULL;
result->next->val = sum % 10;
result = result->next;
}
if(l1)
//if(l1->next)
l1=l1->next;
//else
// l1=NULL;
if(l2)
//if(l2->next)
l2=l2->next;
//else
// l2=NULL;
}
if(carry){
result->next=(struct ListNode*)malloc(sizeof(struct ListNode));
//malloc(sizeof(struct ListNode));
result->next->next = NULL;
result->next->val = carry;
}
return head;
}