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指向其他节点,从而确保合并后的新链表是正确的。

C语言链表合并算法详解:List Merge(L1, L2)

原文地址: https://www.cveoy.top/t/topic/fEmg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录