关于两个指针指向同一个malloc地址的问题

今天做了一个题,要建立一个链表。于是我先用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;
}