单链表的基本操作 C语言
时间: 2023-07-22 08:04:45 浏览: 121
单链表是一种常用的数据结构,它可以用来存储一系列数据,每个节点包含数据和指向下一个节点的指针。常见的基本操作包括创建链表、插入节点、删除节点、遍历链表等。以下是单链表的基本操作的 C 语言实现:
定义单链表节点结构体:
```c
typedef struct ListNode {
int data; // 节点数据
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
```
创建链表:
```c
ListNode* createList(int* nums, int numsSize) {
ListNode* head = NULL; // 链表头指针
ListNode* tail = NULL; // 链表尾指针
for (int i = 0; i < numsSize; i++) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode)); // 创建新节点
node->data = nums[i]; // 设置节点数据
node->next = NULL; // 初始化节点指针
if (head == NULL) { // 如果链表为空,设置头指针和尾指针
head = node;
tail = node;
} else { // 如果链表不为空,追加到尾部
tail->next = node;
tail = node;
}
}
return head; // 返回链表头指针
}
```
插入节点:
```c
void insertNode(ListNode** head, int data, int pos) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode)); // 创建新节点
node->data = data; // 设置节点数据
node->next = NULL; // 初始化节点指针
if (pos == 0) { // 如果插入位置为头部,直接设置头指针
node->next = *head;
*head = node;
} else {
ListNode* cur = *head;
for (int i = 0; i < pos-1; i++) { // 找到要插入位置的前一个节点
cur = cur->next;
}
node->next = cur->next; // 在前一个节点后插入新节点
cur->next = node;
}
}
```
删除节点:
```c
void deleteNode(ListNode** head, int pos) {
if (*head == NULL) { // 如果链表为空,直接返回
return;
}
ListNode* cur = *head;
if (pos == 0) { // 如果删除位置为头部,直接移动头指针
*head = (*head)->next;
free(cur);
} else {
for (int i = 0; i < pos-1; i++) { // 找到要删除位置的前一个节点
cur = cur->next;
}
ListNode* tmp = cur->next; // 删除节点并释放内存
cur->next = tmp->next;
free(tmp);
}
}
```
遍历链表:
```c
void printList(ListNode* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
```
以上就是单链表的基本操作 C 语言实现。
阅读全文