#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Node
{
int x;
struct Node *next;
};
void createList(Node *head,int n){
Node *p;
while(n--){
Node *s = new Node;
s->next = NULL;
scanf("%d",&s->x);
if(head->next == NULL){
head->next = s;
}
else
p->next = s;
p = s;
}
}
void delList(Node *head){
Node *r,*p;
r = p = head;
while(p){
r = p;
p = p->next;
delete r;
}
}
void print(Node *head){
Node *p = head->next;
if(!p){
printf("NULL\n");
return;
}
while(p){
if(p->next == NULL)
printf("%d",p->x);
else
printf("%d ",p->x);
p = p->next;
}
printf("\n");
}
void reverse(Node *head){
Node *p = head->next;
Node *q;
head->next = NULL;
while(p){
q = p;
p = p->next;
q->next = head->next;
head->next = q;
}
}
void merge(Node *head1,Node *head2){
Node *p1,*p2,*pre,*r;
p1 = head1->next;
p2 = head2->next;
pre = head1;
head2->next = NULL;
delete head2;
while(p1 && p2){
if(p1->x < p2->x){
pre = p1;
p1 = p1->next;
}else{
r = p2;
p2 = p2->next;
r->next = pre->next;
pre->next = r;
pre = r;
}
}
if(!p1)
pre->next = p2;
}
int main(int argc, char const *argv[])
{
int n,m;
while(scanf("%d %d",&n,&m) != EOF){
Node *head1= new Node;
Node *head2= new Node;
head1->next = NULL;
head2->next = NULL;
createList(head1,n);
createList(head2,m);
merge(head1,head2);
print(head1);
delList(head1);
}
return 1;
}
链表的一系列操作
最新推荐文章于 2024-06-17 17:38:36 发布