数据结构(带头结点单链表)逆置和二路归并

题目:​假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。

代码:

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct ListNode
{
    ElemType data;
    ListNode *next;
} Node, *ListNode;

bool Gb_A_B(ListNode &A, ListNode &B)
{
    if (A == NULL || B == NULL || A->next == NULL || B->next == NULL)
    {
        return false;
    }
    ListNode p = A->next, q = B->next;
    A->next = NULL;
    B->next = NULL;
    while (p)
    {
        ListNode k = p->next;//预存下一个结点
        p->next = A->next;
        A->next = p;
        p = k;
    }
    while (q)
    {
        ListNode k = q->next;
        q->next = B->next;
        B->next = q;
        q = k;
    }
    ListNode C = (Node *)malloc(sizeof(Node));
    ListNode a = A, b = B, c = C;
    while (a && b)
    {
        if (a->next->data > b->next->data)
        {
            c->next = (Node *)malloc(sizeof(Node));
            c->next->data = a->next->data;
            a = a->next;
        }
        else
        {
            c->next = (Node *)malloc(sizeof(Node));
            c->next->data = b->next->data;
            b = b->next;
        }
        c = c->next;
    }
    if (a != NULL)
    {
        c->next = a;
    }
    else
    {
        c->next = b;
    }
    A->next = C->next;
    B->next = C->next;
    return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落入尘凡,羽化成仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值