C语言实现的单链表结构
在C语言中,实现一个简单的单链表结构需要定义节点结构和相关操作函数。下面是一个完整的单链表实现,包括节点结构定义、链表初始化、节点插入、节点删除和链表遍历等基本操作。
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建一个新的节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("内存分配失败\n");
exit(-1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 在链表头部插入新节点
void insertAtHead(Node** head, int data) {
Node* newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
// 在链表尾部插入新节点
void insertAtTail(Node** head, int data) {
Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
// 删除指定值的节点
void deleteNode(Node** head, int key) {
Node* temp = *head;
Node* prev = NULL;
// 如果头节点就是要删除的节点
if (temp != NULL && temp->data == key) {
*head = temp->next;
free(temp);
return;
}
// 查找要删除的节点,同时记录前一个节点
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
// 如果找不到节点
if (temp == NULL) return;
// 从链表中删除节点
prev->next = temp->next;
free(temp);
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
// 示例使用
int main() {
Node* head = NULL;
insertAtHead(&head, 3);
insertAtHead(&head, 1);
insertAtTail(&head, 4);
insertAtTail(&head, 5);
printf("初始链表: ");
printList(head);
deleteNode(&head, 1);
printf("删除1后: ");
printList(head);
deleteNode(&head, 5);
printf("删除5后: ");
printList(head);
return 0;
}
说明:
- 节点结构:
Node
结构体定义链表的节点,包含数据部分和指向下一节点的指针。 - 创建节点:
createNode
函数用于创建新节点并分配内存。 - 插入操作:
insertAtHead
用于在链表头部插入节点。insertAtTail
用于在链表尾部插入节点。
- 删除操作:
deleteNode
根据给定值删除节点。 - 打印操作:
printList
用于遍历和输出链表内容。
这段代码演示了如何操作一个简单的单链表结构,包括插入和删除节点的基本功能。