题目



不能够实现的代码 对传进来L1 L2结构体指针操作 能够实现让两个链表合并成一个递增的顺序链表 但是L1 L2在Merge函数结束时为NULL 回到main函数却变成了最开始L1 L2的头指针节点
List Merge( List L1, List L2 )
{
List head,temp;
head = temp = (List)malloc(sizeof(struct Node));
L1 = L1->Next;
L2 = L2->Next;
while(L1 && L2)
{
if(L1->Data <= L2->Data)
{
temp->Next = L1;
L1 = L1->Next;
}
else
{
temp->Next = L2;
L2 = L2->Next;
}
temp = temp->Next;
}
if(L1)
{
while(L1)
{
temp->Next = L1;
L1 = L1->Next;
temp = temp->Next;
}
temp->Next = NULL;
}
else if(L2)
{
while(L2)
{
temp->Next = L2;
L2 = L2->Next;
temp = temp->Next;
}
temp->Next = NULL;
}
else
temp->Next = NULL;
//到这里L1 L2为NULL 运行到后面在main函数里打印出L1 L2为原始头节点。。
return head;
}
能够实现的代码 使用两个局部变量来移动节点 用temp来指向产生一个新的链表 最后让L1 L2始终是头节点未改动,L1 L2头结点下一个指向NULL 成功影响外面的main函数里的L1 L2 这是为什么呢?为什么上一段代码不能影响到main函数里的L1 L2 第二段这个确实可以呢?
List Merge( List L1, List L2 )
{
List head,temp,TL1,TL2;
head = temp = (List)malloc(sizeof(struct Node));
TL1 = L1->Next;
TL2 = L2->Next;
while(TL1 && TL2)
{
if(TL1->Data <= TL2->Data)
{
temp->Next = TL1;
TL1 = TL1->Next;
}
else
{
temp->Next = TL2;
TL2 = TL2->Next;
}
temp = temp->Next;
}
if(TL1)
{
while(TL1)
{
temp->Next = TL1;
TL1 = TL1->Next;
temp = temp->Next;
}
temp->Next = NULL;
}
else if(TL2)
{
while(TL2)
{
temp->Next = TL2;
TL2 = TL2->Next;
temp = temp->Next;
}
temp->Next = NULL;
}
else
temp->Next = NULL;
L1->Next = NULL;
L2->Next = NULL;
return head;
}