要求建立两个带头结点的单链表。输入若干整数,将正整数插入第一个单链表,将负整数插入第二个单链表。在插入前和插入后,两个单链表都要保持递增或相等的次序。最后,显示两个单链表,并销毁它们。在编写程序时,需要注意避免内存泄漏的问题。
时间: 2023-05-17 07:04:15 浏览: 80
以下是建立两个带头结点的单链表的代码,实现了输入若干整数,将正整数插入第一个单链表,将负整数插入第二个单链表。在插入前和插入后,两个单链表都保持递增或相等的次序。最后,显示两个单链表,并销毁它们。
```
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
void insert(Node *head, int data) {
Node *p = head;
while (p->next != NULL && p->next->data < data) {
p = p->next;
}
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = p->next;
p->next = newNode;
}
void printList(Node *head) {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void destroyList(Node *head) {
Node *p = head;
while (p != NULL) {
Node *temp = p;
p = p->next;
free(temp);
}
}
int main() {
Node *head1 = (Node *)malloc(sizeof(Node));
head1->next = NULL;
Node *head2 = (Node *)malloc(sizeof(Node));
head2->next = NULL;
int n;
printf("请输入整数个数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int data;
printf("请输入第%d个整数:", i + 1);
scanf("%d", &data);
if (data >= 0) {
insert(head1, data);
} else {
insert(head2, data);
}
}
printf("第一个单链表:");
printList(head1);
printf("第二个单链表:");
printList(head2);
destroyList(head1);
destroyList(head2);
return 0;
}
```
关于避免内存泄漏的问题,我们在销毁链表时需要逐个释放每个节点的内存,否则会造成内存泄漏。