用c语言写一个两个非递增的单链表的合并
时间: 2023-04-05 22:01:57 浏览: 49
可以使用以下代码实现两个非递增的单链表的合并:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
Node *merge(Node *head1, Node *head2) {
Node *p1 = head1;
Node *p2 = head2;
Node *head = NULL;
Node *tail = NULL;
while (p1 != NULL && p2 != NULL) {
if (p1->data >= p2->data) {
if (head == NULL) {
head = p1;
tail = p1;
} else {
tail->next = p1;
tail = p1;
}
p1 = p1->next;
} else {
if (head == NULL) {
head = p2;
tail = p2;
} else {
tail->next = p2;
tail = p2;
}
p2 = p2->next;
}
}
if (p1 != NULL) {
if (head == NULL) {
head = p1;
} else {
tail->next = p1;
}
}
if (p2 != NULL) {
if (head == NULL) {
head = p2;
} else {
tail->next = p2;
}
}
return head;
}
int main() {
Node *head1 = (Node *) malloc(sizeof(Node));
head1->data = 5;
head1->next = (Node *) malloc(sizeof(Node));
head1->next->data = 3;
head1->next->next = (Node *) malloc(sizeof(Node));
head1->next->next->data = 1;
head1->next->next->next = NULL;
Node *head2 = (Node *) malloc(sizeof(Node));
head2->data = 6;
head2->next = (Node *) malloc(sizeof(Node));
head2->next->data = 4;
head2->next->next = (Node *) malloc(sizeof(Node));
head2->next->next->data = 2;
head2->next->next->next = NULL;
Node *head = merge(head1, head2);
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
return 0;
}
```