#include <stdlib.h>
#include <stdio.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode ,*linkList;
void CreateList_H(linkList *L, int n)
{
*L=(LNode*)malloc(sizeof(LNode));
(*L)->next=NULL;
LNode* current;
LNode* tail;
tail=*L;
for(int i=0;i<n;i++)
{
current=(LNode*)malloc(sizeof(LNode));
scanf("%d",¤t->data);
current->next=tail->next;
tail->next=current;
tail=current;
}
}
void delete1(linkList *L,int x)
{
LNode *p=*L;
int i=1;
while (p->next != NULL && i < x) {
p = p->next;
i++;
}
LNode *s=(LNode*)malloc(sizeof(LNode));
s=p->next;
int e=s->data;
p->next=s->next;
free(s);
}
void guibing(linkList *L1, linkList *L2, linkList *L3) {
*L3 = (LNode*)malloc(sizeof(LNode));
(*L3)->next = NULL;
LNode *h1 = (*L1)->next;
LNode *h2 = (*L2)->next;
LNode *tail = *L3;
while (h1 != NULL && h2 != NULL) {
if (h1->data <= h2->data) {
tail->next = h1;
tail = h1; // 更新尾指针
h1 = h1->next; // 移动 h1
} else {
tail->next = h2;
tail = h2;
h2 = h2->next;
}
// 注意这里没有增加 tail->next,因为 tail 已经指向了新的节点
}
// 如果 h1 或 h2 还有剩余元素,直接连接到新链表的末尾
if (h1 != NULL) {
tail->next = h1;
} else if (h2 != NULL) {
tail->next = h2;
}
}
void PrintList (linkList L)
{
LNode *head=L->next;
while(head!=NULL)
{
printf("%d ",head->data);
head=head->next;
}
}
int main()
{
linkList L1,L2,L3;
int len1,len2;
scanf("%d",&len1);
CreateList_H(&L1,len1);
scanf("%d",&len2);
CreateList_H(&L2,len2);
guibing(&L1,&L2,&L3);
PrintList(L3);
return 0;
}