利用C语言编写在单链表上实现插入和删除的算法。
时间: 2024-02-25 17:57:36 浏览: 43
单链表是一种常见的数据结构,它由一系列结点组成,每个结点包含一个数据元素和一个指向下一个结点的指针。单链表的插入和删除操作是常见的基本操作,下面给出在单链表上实现插入和删除的C语言算法。
插入操作:
```
void insertNode(ListNode* head, int val, int pos) {
ListNode* p = head;
int i = 0;
while (p != NULL && i < pos - 1) {
p = p->next;
i++;
}
if (p == NULL || i > pos - 1) {
printf("插入位置非法!\n");
return;
}
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = p->next;
p->next = newNode;
}
```
上述插入操作的函数名为 `insertNode`,它接受三个参数:链表头结点指针 `head`、待插入的值 `val` 和插入位置 `pos`。在函数内部,首先定义一个指针 `p` 指向链表头结点,然后循环遍历链表,直到找到插入位置为止。如果插入位置非法,则输出提示信息并返回。如果插入位置合法,则创建一个新结点,将待插入的值赋给新结点的 `val` 字段,然后将新结点插入到链表中。
删除操作:
```
void deleteNode(ListNode* head, int pos) {
ListNode* p = head;
int i = 0;
while (p != NULL && i < pos - 1) {
p = p->next;
i++;
}
if (p == NULL || i > pos - 1 || p->next == NULL) {
printf("删除位置非法!\n");
return;
}
ListNode* q = p->next;
p->next = q->next;
free(q);
}
```
上述删除操作的函数名为 `deleteNode`,它接受两个参数:链表头结点指针 `head` 和待删除的位置 `pos`。在函数内部,首先定义一个指针 `p` 指向链表头结点,然后循环遍历链表,直到找到待删除位置的前一个结点为止。如果待删除位置非法,则输出提示信息并返回。如果待删除位置合法,则定义一个指针 `q` 指向待删除的结点,将 `p->next` 指向 `q->next`,然后释放 `q` 所指向的内存空间。