C语言链表合并算法详解:List Merge(L1, L2)
C语言链表合并算法详解:List Merge(L1, L2)
函数代码:
List Merge( List L1, List L2 )
{
PtrToNode p1 = L1->Next;
PtrToNode p2 = L2->Next;
PtrToNode p = NULL;
PtrToNode head = NULL;
if(p1 == NULL)
return L2;
if(p2 == NULL)
return L1;
head = (PtrToNode)malloc(sizeof(struct Node));
head->Next = NULL;
p = head;
while(p1 != NULL && p2 != NULL)
{
if(p1->Data <= p2->Data)
{
p->Next = p1;
p1 = p1->Next;
}
else
{
p->Next = p2;
p2 = p2->Next;
}
p = p->Next;
}
if(p1 != NULL)
p->Next = p1;
if(p2 != NULL)
p->Next = p2;
L1->Next = NULL;
L2->Next = NULL;
return head;
}
L1->Next = NULL的作用
在函数中,L1->Next = NULL; 的作用是将L1链表断开,并将L1链表的最后一个节点的Next指针设置为NULL。
这样做是为了防止在执行完合并操作后,L1链表仍然指向其他节点,导致链表混乱或意外的操作。
为什么将L1链表断开
将L1链表断开的原因是因为在合并操作中,会改变原始链表的结构,将L1和L2链表中较小的节点逐个插入到新链表中,而不是创建新的节点。因此,为了确保合并后的新链表的正确性,需要将原始链表的Next指针设置为NULL,以避免出现意外的链接。
总结
将L1链表断开是为了保证在合并操作中不会影响原始链表的结构,并确保合并后的新链表是正确的。
示例
假设L1链表为:1->3->5,L2链表为:2->4->6
合并后的新链表为:1->2->3->4->5->6
在合并操作中,L1->Next = NULL; 将L1链表断开,防止L1链表中的最后一个节点5指向其他节点,从而确保合并后的新链表是正确的。
原文地址: https://www.cveoy.top/t/topic/fEmg 著作权归作者所有。请勿转载和采集!