有序链表的合并

目录

 一:首先对俩个链表进行判空,哪个空了就直接返回另外一个。

二:定义一个指针p,让p指向俩个有序链表中更小的第一个结点。

三:进行链表的有序合并

四、如果循环结束要么俩个链表都为空,要么其中一个为空,将后面的链表接入p的位置即可


一个比较简单的链表合并,不过两种思路挺不错。

 一:首先对俩个链表进行判空,哪个空了就直接返回另外一个。

if(NULL == pHead1)
    return pHead2;
    if(NULL == pHead2)
    return pHead1;

二:定义一个指针p,让p指向俩个有序链表中更小的第一个结点。

struct ListNode* p = NULL;
    struct ListNode* P = NULL;
    struct ListNode* p1 = pHead1;
    struct ListNode* p2 = pHead2;

    if(p1->val <= p2->val)
    {
        p = p1;
        p1 = p1->next;
    }
    else
    {
        p = p2;
        p2 = p2->next;
    }
    P = p;

三:进行链表的有序合并

while(p1 && p2)
    {
        if(p1->val >= p2->val)
        {   //利用p结点后的尾插                利用p指针的直接指向
            pHead2 = p2->next;              //p->next = p2;
            p2->next = p->next;             //p2 = p2->next;
            p->next = p2;
            p2 = pHead2;
        }
        else
        {
            pHead1 = p1->next;              //p->next = p1;
            p1->next = p->next;             //p1 = p1->next; 
            p->next = p1;
            p1 = pHead1;
        }
        p = p->next;
    }

可以看到有俩种思路,我先想到的是直接在p指针后将结点尾插到后面。

另外一个思路 是直接在链表上进行操作,通过移动p指针的指向。

当指针遍历到上图中 位置时,p1指针的值大于p2指针的值的时候,就可以利用p指针直接指向p2的位置,然后让p2 移动到下一个位置即可。

四、如果循环结束要么俩个链表都为空,要么其中一个为空,将后面的链表接入p的位置即可

if(p1 == NULL)
    p->next = p2;
    if(p2 == NULL)
    p->next = p1;
    return P;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值