c语言请输入一个线性表,用头插法创建为单链表,并输出。操作完成后释放创建的单链表。 输入 输入包括两行: 第一行输入单链表长度 第二行输入线性表的元素 输出 输出头插法创建的单链表,每个节点的值之间空一格 如果创建失败,请输出 -1
时间: 2024-09-16 19:02:41 浏览: 63
在 C 语言中,我们可以使用结构体表示链表节点,头插法是指每次将新节点插入到链表头部的操作。以下是创建单链表、插入节点以及输出链表的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建链表函数
Node* createList(int n) {
Node* head = NULL; // 初始化头指针为空
if (n <= 0) { // 如果输入长度小于等于0,返回NULL表示失败
printf("-1\n");
return NULL;
}
// 依次读取输入并创建节点
for (int i = 0; i < n; i++) {
int input_data;
scanf("%d", &input_data); // 输入当前节点的数据
// 创建新的节点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = input_data;
newNode->next = head; // 新节点的next指向当前头
// 更新头指针
head = newNode;
}
return head;
}
// 输出链表函数
void printList(Node* head) {
if (head == NULL) {
printf("链表为空\n");
return;
}
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
int length;
scanf("%d", &length);
Node* list = createList(length);
if (list != NULL) {
printList(list);
// 在这里添加释放内存的代码,防止内存泄漏
Node* current = list;
while (current != NULL) {
Node* next = current->next;
free(current);
current = next;
}
}
return 0;
}
```
在这个程序中,首先从用户那里获取链表的长度和元素,然后创建链表并将数据插入,最后输出链表内容。在`main`函数结束时,会遍历链表并释放每个节点,以避免内存泄漏。
阅读全文