编写一个程序,在自定义函数中完成下列功能并在主函数中进行测试: 建立一个长度为n的单链表。用简单的c语言或c++
时间: 2024-10-09 16:01:19 浏览: 41
在C语言中,你可以使用结构体定义一个节点,并通过指针连接形成单链表。首先,我们定义链表节点的结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建链表头节点
Node* createList(int n) {
if (n <= 0) {
printf("Error: List length should be positive.\n");
return NULL;
}
Node* head = (Node*)malloc(sizeof(Node)); // 分配空间
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->data = 0; // 初始化第一个节点的数据
head->next = NULL;
// 创建剩余节点并链接
for (int i = 1; i < n; ++i) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed for node %d.\n", i);
free(head); // 如果失败,释放已分配的内存
return NULL;
}
newNode->data = i; // 设置数据
newNode->next = head->next; // 将新节点连接到前一个节点
head->next = newNode;
}
return head;
}
// 测试函数
void printList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
int main() {
int n;
printf("Enter the length of the list: ");
scanf("%d", &n);
Node* listHead = createList(n);
if (listHead != NULL) {
printf("Created list with length %d:\n", n);
printList(listHead);
} else {
printf("Failed to create the list.\n");
}
// 释放链表内存
free(listHead);
return 0;
}
```
这个程序首先创建一个指定长度的链表,然后打印出链表的所有元素。注意,由于内存管理的问题,你需要在主函数结束时释放链表的内存。
阅读全文