c语言创建单链表并且实现求链表长度,输出链表,插入,删除,查找等功能
时间: 2024-09-26 11:01:57 浏览: 58
在C语言中创建单链表并实现求链表长度、输出链表、插入、删除和查找等操作,通常会涉及到以下几个步骤:
### 创建链表结构体
```c
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
```
### 创建链表函数
- 初始化一个空链表:`Node* createList()`,创建头节点并使其next为NULL。
- 插入节点:`void insert(Node** head, int value)`,在链表尾部插入新节点。
- 查找节点:`Node* search(Node* head, int key)`,遍历链表查找特定值的节点。
### 计算链表长度
- 使用迭代或递归方式计算长度:`int length(Node* head)`,通过遍历链表,每次增加计数器。
### 输出链表
- `void printList(Node* head)`,遍历链表打印节点数据。
### 删除节点
- 删除特定节点:`void deleteNode(Node** head, int key)`,需要找到待删除节点并调整相邻节点的next指针。
以下是部分函数的实现示例:
```c
// 创建链表
Node* createList() {
Node* head = (Node*)malloc(sizeof(Node));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->data = 0;
head->next = NULL;
return head;
}
// 插入节点
void insert(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 删除节点
void deleteNode(Node** head, int key) {
if (*head == NULL) return;
if ((*head)->data == key) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node* current = *head;
while (current->next != NULL && current->next->data != key) {
current = current->next;
}
if (current->next != NULL) {
Node* temp = current->next;
current->next = temp->next;
free(temp);
}
}
// 计算链表长度
int length(Node* head) {
int count = 0;
Node* temp = head;
while (temp != NULL) {
count++;
temp = temp->next;
}
return count;
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
```
阅读全文