struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
struct ListNode* L = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *l1=list1,*l2=list2,*head=L;
L->next = NULL;
while(l1!=NULL && l2!=NULL){
if(l1->val val)
{
head->next=l1;
l1=l1->next;
}
else
{
head->next=l2;
l2=l2->next;
}
head=head->next;
}
if(l1==NULL){
head->next=l2;
}
if(l2==NULL){
head->next=l1;
}
return L->next;
}
这应该是一个有头节点的指针,如下,应该返回的是第一个有实际意义的结点,而头节点L没有存有数据,所以是没有实际意义的,只是一个指针,指向第一个结点
这应该是某道算法题吧,想必答案需要的是第一个结点就有值,如果返回L的话,值域是没有东西的,这个叫头结点,如果是L-next,那么就可以从第一个结点就能读取到值了
头节点不存数据,头结点存在可以用来删除链表中的第一个数据,返回的话可以直接返回L->next,这样的话,输出链表时就会从第一个数据开始输出,你也可以返回L.,那样的话,你在函数外输出就要从L->next开始输出。
* list1, * list2 都是不带头结点的链表,合并为 L 时也不需要带头结点,在合并函数里生成头结点,是为了方便操作,完成合并后,只需返回链表 L->next 第一个结点即可。
你可以对比下,我博客里的单链表操作中的合并操作