【資料結構】【合併兩個有序連結串列】
阿新 • • 發佈:2018-11-01
#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); }