逼话少说,上代码!
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
const int TRUE = 1;
const int FALSE = 0;
typedef int Status;
typedef struct node
{
int data;
node* next;
}LNode, *LinkList;
void Creat_LinkList(LinkList &L, int len);
void Mesh_LinkLists(LinkList &L1, LinkList &L2);
int main(void)
{
int L1_len, L2_len;
LinkList L1, L2;
printf("\nL1链表长度为:");
scanf("%d", &L1_len);
printf("\nL2链表长度为:");
scanf("%d", &L2_len);
printf("\n输入链表L1的元素:");
Creat_LinkList(L1, L1_len);
printf("\n输入链表L2的元素:");
Creat_LinkList(L2, L2_len);
Mesh_LinkLists(L1, L2);
printf("\n合并后的链表为:");
for(LinkList p = L1 -> next; p != NULL; p = p -> next)
{
printf("%d ", p -> data);
}
return 0;
}
void Creat_LinkList(LinkList &L, int len)
{
if(len <= 0)
{
printf("\n数据不合法!");
exit(1);
}
int temp;
LNode* head;
LNode* p;
//建立空链表
head = new LNode;
head -> next = NULL;
L = head;
p = head;
//输入数据存入链表
for(int i = 0; i < len; i++)
{
LNode* new_node = new LNode;
scanf("%d", &temp);
new_node -> data = temp;
new_node -> next = NULL;
p -> next = new_node;
p = p -> next;
}
return;
}
void Mesh_LinkLists(LinkList &L1, LinkList &L2)//L1和L2为递增序列,都有头结点,将L2中的值按序插入L1中
{
if(!L1)//L1为空链表
{
L1 = L2;
return;
}
LinkList p1, p2, p3;
p1 = L1 -> next;
p2 = L2 -> next;
p3 = L1;
while(p1 && p2)
{
if(p1 -> data <= p2 -> data)
{
p3 -> next = p1;
p1 = p1 -> next;
}
else
{
p3 -> next = p2;
p2 = p2 -> next;
}
p3 = p3 -> next;
}
//长链表较短链表多出的部分接在合成链表的后面
if(p1 != NULL)
{
p3 -> next = p1;
}
if(p2 != NULL)
{
p3 -> next = p2;
}
return;
}