链表合并
题目描述:
输入描述:
输出描述:
C语言代码
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data; // 节点中的元素为整数类型
struct Node * next; // 指向下一个节点
}node;
int main()
{
int n, m, temp;
scanf("%d", &n);
node *head=NULL, *head1=NULL, *head2=NULL, *p=NULL, *q=NULL, *z;
for (int i = 0; i < n; i++) //建第一条链表
{
p = (node *)malloc(sizeof(node));
scanf("%d ", &temp);
p->data = temp;
p->next = NULL;
if (head1 == NULL) head1 = p;
else q->next = p;
q = p;
}
scanf("%d", &m);
for (int i = 0; i < m; i++) //建第二条链表
{
p = (node *)malloc(sizeof(node));
scanf_s("%d ", &temp);
p->data = temp;
p->next = NULL;
if (head2 == NULL) head2 = p;
else q->next = p;
q = p;
}
//p = head1; q = head2;
while (head1!=NULL&&head2!=NULL)
{
if (head1->data > head2->data)
{
z = (node *)malloc(sizeof(node));
z->data = head2->data;
z->next = NULL;
if (head == NULL) head = z;
else p->next = z;
p = z;
head2 = head2->next;
}
else
{
z = (node *)malloc(sizeof(node));
z->data = head1->data;
z->next = NULL;
if (head == NULL) head = z;
else p->next = z;
p = z;
head1 = head1->next;
}
}
if (head1!= NULL) p->next = head1; //直接将剩余的链表连接到合并的这一条
else if(head2!= NULL) p->next = head2;
for (int i = 0; i < n + m; i++) //输出链表
{
printf("%d ", head->data);
head = head->next;
}
return 0;
}
共开辟了三条链表空间,前两条存输入的链表,最后一条用来存合并的节点。