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 == NULL) {
printf("Memory allocation failed\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
插入节点
在链表末尾插入节点
void insertAtEnd(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 insertAtBeginning(Node** head, int data) {
Node* newNode = createNode(data);
newNode->next = *head;
*head = 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);
}
查找节点
Node* searchNode(Node* head, int key) {
Node* current = head;
while (current != NULL) {
if (current->data == key) {
return current;
}
current = current->next;
}
return NULL; // 如果没找到,返回NULL
}
遍历链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
示例使用
int main() {
Node* head = NULL;
insertAtEnd(&head, 10);
insertAtEnd(&head, 20);
insertAtBeginning(&head, 5);
printList(head);
deleteNode(&head, 20);
printList(head);
Node* foundNode = searchNode(head, 10);
if (foundNode != NULL) {
printf("Node found with value: %d\n", foundNode->data);
} else {
printf("Node not found.\n");
}
return 0;
}
这个示例展示了如何使用上述函数来实现和操作一个简单的单链表。确保在实际的程序中对内存分配进行适当的检查和释放,以防止内存泄漏。