下面是使用C语言实现单链表的代码示例:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建链表
Node* createLinkedList(int n) {
Node* head = NULL; // 头节点指针
Node* tail = NULL; // 尾节点指针
// 依次创建n个节点
for (int i = 0; i < n; i++) {
// 创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
// 输入节点数据
printf("请输入第%d个节点的数据:", i + 1);
scanf("%d", &(newNode->data));
// 将新节点插入链表尾部
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
// 尾节点指针置空
if (tail != NULL) {
tail->next = NULL;
}
return head;
}
// 遍历链表
void traverseLinkedList(Node* head) {
Node* p = head;
printf("链表的数据为:");
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 插入节点
Node* insertNode(Node* head, int position, int data) {
// 创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
// 插入头节点
if (position == 0) {
newNode->next = head;
return newNode;
}
// 插入其他位置
Node* p = head;
for (int i = 0; i < position - 1; i++) {
if (p == NULL) {
printf("插入位置无效\n");
return head;
}
p = p->next;
}
newNode->next = p->next;
p->next = newNode;
return head;
}
// 删除节点
Node* deleteNode(Node* head, int position) {
// 删除头节点
if (position == 0) {
Node* p = head;
head = head->next;
free(p);
return head;
}
// 删除其他位置
Node* p = head;
for (int i = 0; i < position - 1; i++) {
if (p == NULL || p->next == NULL) {
printf("删除位置无效\n");
return head;
}
p = p->next;
}
Node* q = p->next;
p->next = q->next;
free(q);
return head;
}
// 释放链表内存
void freeLinkedList(Node* head) {
Node* p = head;
while (p != NULL) {
Node* q = p;
p = p->next;
free(q);
}
}
int main() {
int n; // 链表节点个数
printf("请输入链表节点个数:");
scanf("%d", &n);
Node* head = createLinkedList(n);
traverseLinkedList(head);
int insertPos, insertData;
printf("请输入要插入的位置和数据(用空格隔开):");
scanf("%d %d", &insertPos, &insertData);
head = insertNode(head, insertPos, insertData);
traverseLinkedList(head);
int deletePos;
printf("请输入要删除的位置:");
scanf("%d", &deletePos);
head = deleteNode(head, deletePos);
traverseLinkedList(head);
freeLinkedList(head);
return 0;
}
```
这个代码实现了创建单链表、遍历链表、插入节点和删除节点等基本操作。其中,`createLinkedList`函数用于创建链表,`traverseLinkedList`函数用于遍历链表,`insertNode`函数用于插入节点,`deleteNode`函数用于删除节点,`freeLinkedList`函数用于释放链表内存。