单链表基本操作c语言
时间: 2023-09-21 21:04:33 浏览: 132
单链表是一种常见的数据结构,用于存储一系列的元素。在C语言中,可以通过定义一个结构体来表示单链表的节点,每个节点包含一个数据域和一个指针域,指向下一个节点。
首先,我们需要定义单链表的节点结构体:
```c
struct ListNode {
int data; // 数据域
struct ListNode* next; // 指针域,指向下一个节点
};
```
接下来,我们可以实现一些基本操作,比如创建单链表、插入节点、删除节点和遍历单链表等。
创建单链表的函数如下所示,可以根据给定的数组创建一个单链表:
```c
struct ListNode* createLinkedList(int arr[], int size) {
struct ListNode* head = NULL; // 头节点指针
struct ListNode* tail = NULL; // 尾节点指针
for (int i = 0; i < size; i++) {
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->data = arr[i];
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
```
插入节点的函数如下所示,可以在指定位置插入一个新节点:
```c
void insertNode(struct ListNode** head, int data, int position) {
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->data = data;
newNode->next = NULL;
// 插入到链表头部
if (position == 0) {
newNode->next = *head;
*head = newNode;
return;
}
struct ListNode* curr = *head;
struct ListNode* prev = NULL;
int count = 0;
// 找到插入位置的前一个节点
while (curr != NULL && count < position) {
prev = curr;
curr = curr->next;
count++;
}
// 插入到链表中间或尾部
if (curr != NULL) {
newNode->next = curr;
}
prev->next = newNode;
}
```
删除节点的函数如下所示,可以删除指定位置的节点:
```c
void deleteNode(struct ListNode** head, int position) {
if (*head == NULL) {
return;
}
struct ListNode* curr = *head;
struct ListNode* prev = NULL;
int count = 0;
// 找到要删除的节点
while (curr != NULL && count < position) {
prev = curr;
curr = curr->next;
count++;
}
// 删除头节点
if (prev == NULL) {
*head = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
}
```
遍历单链表的函数如下所示,可以将单链表中的元素依次输出:
```c
void traverseLinkedList(struct ListNode* head) {
struct ListNode* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
}
```
以上是单链表的基本操作实现,你可以根据需要调用这些函数进行单链表的操作。
阅读全文