#include <bits/stdc++.h>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
} * LinkList, LNode;
LinkList Init(vector<int> &data)
{
LNode *head = (LNode *)malloc(sizeof(LNode));
LNode *p = head;
p->data = data[0];
p->next = NULL;
for (int i = 1; i < data.size(); ++i)
{
LNode *is = (LNode *)malloc(sizeof(LNode));
is->data = data[i];
is->next = NULL;
p->next = is;
p = p->next;
}
return head;
}
void Print(LinkList L)
{
LNode *p = L;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
LinkList mergeAandB(LinkList A, LinkList B)
{
LNode *head = (LNode *)malloc(sizeof(LNode));
LNode *p = head;
LNode *a = A, *b = B;
if (a->data <= b->data)
{
p->data = a->data;
a = a->next;
}
else
{
p->data = b->data;
b = b->next;
}
while (a != NULL || b != NULL)
{
LNode *is = (LNode *)malloc(sizeof(LNode));
is->next = NULL;
if (b == NULL || a != NULL && a->data <= b->data)
{
is->data = a->data;
a = a->next;
}
else
{
is->data = b->data;
b = b->next;
}
p->next = is;
p = p->next;
}
return head;
}
int main()
{
vector<int> a, b;
a.resize(5);
a[0] = 1, a[1] = 3, a[2] = 5, a[3] = 7, a[4] = 9;
b.resize(6);
b[0] = 0, b[1] = 2, b[2] = 4, b[3] = 6, b[4] = 8, b[5] = 9;
LinkList A = Init(a), B = Init(b);
Print(A);
Print(B);
LinkList L = mergeAandB(A, B);
Print(L);
return 0;
}
两个升序链表合并为非递减链表(不带头结点)
于 2022-08-16 20:08:56 首次发布