#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int maxn = 1e5 + 5;
struct node {
int num;
struct node *next;
};
struct node* merage(struct node*head1, struct node *head2) {
struct node* anshead = (struct node *)malloc(sizeof(struct node));
struct node* pre = (struct node *)malloc(sizeof(struct node));
anshead->next = NULL;
pre = anshead;
struct node*h1 = head1->next;
struct node*h2 = head2->next;
while (h1&& h2) {
struct node* tmp = (struct node *)malloc(sizeof(struct node));
tmp->next = NULL;
if (h1->num > h2->num) {
tmp->num = h2->num;
h2 = h2->next;
}
else {
tmp->num = h1->num;
h1 = h1->next;
}
pre->next = tmp;
pre = tmp;
}
while (h1) {
struct node* tmp = (struct node *)malloc(sizeof(struct node));
tmp->next = NULL;
tmp->num = h1->num;
h1 = h1->next;
pre->next = tmp;
pre = tmp;
}
while (h2) {
struct node* tmp = (struct node *)malloc(sizeof(struct node));
tmp->next = NULL;
tmp->num = h2->num;
h2 = h2->next;
pre->next = tmp;
pre = tmp;
}
return anshead;
}
int main() {
struct node *pre1,*pre2;
struct node *head1 = (struct node *)malloc(sizeof(struct node));
head1->next = NULL;
pre1 = head1;
struct node *head2 = (struct node *)malloc(sizeof(struct node));
head2->next = NULL;
pre2 = head2;
int n, m;
printf("请输入两个链表的长度:\n");
scanf("%d%d", &n, &m);
printf("请输入第一个链表的元素:\n");
for (int i = 1; i <= n; i++) {
struct node *tmp = (struct node *)malloc(sizeof(struct node));
int x;
scanf("%d", &x);
tmp->num = x;
tmp->next = NULL;
pre1->next = tmp;
pre1 = tmp;
}
printf("请输入第一个链表的元素:\n");
for (int i = 1; i <= m; i++) {
struct node *tmp = (struct node *)malloc(sizeof(struct node));
int x;
scanf("%d", &x);
tmp->num = x;
tmp->next = NULL;
pre2->next = tmp;
pre2 = tmp;
}
struct node*ans = merage(head1, head2);
struct node *p = ans->next;
printf("输出:\n");
while (p != NULL) {
printf("%d ", p->num);
p = p->next;
}
scanf("%d", &n);
}
【数据结构】【合并两个有序链表】
猜你喜欢
转载自blog.csdn.net/running_acmer/article/details/83279864
今日推荐
周排行