某线性表用带头结点的循环单链表存储,删除第i个结点的函数是
时间: 2023-05-19 07:04:19 浏览: 82
删除循环单链表的第i个结点的函数可以按照以下步骤实现:
1. 如果i小于等于0或者大于链表长度,则返回错误信息。
2. 定义两个指针p和q,p指向头结点,q指向第一个结点。
3. 从第一个结点开始遍历链表,直到找到第i个结点为止,同时记录前驱结点pre。
4. 如果找到第i个结点,则将pre的next指针指向i+1结点,释放第i个结点的内存空间。
5. 如果没有找到第i个结点,则返回错误信息。
以下是删除循环单链表第i个结点的完整代码:
```
void deleteNode(CircularLinkedList *list, int i) {
if (i <= 0 || i > list->length) {
printf("Error: Invalid index!\n");
return;
}
Node *p = list->head, *q = list->head->next, *pre = list->head;
int j = 1;
while (q != list->head && j < i) {
pre = q;
q = q->next;
j++;
}
if (j == i) {
pre->next = q->next;
free(q);
list->length--;
} else {
printf("Error: Invalid index!\n");
}
}
```
注意:这里假设CircularLinkedList是一个结构体,包含头结点和链表长度等信息,Node是一个结构体,包含数据域和指向下一个结点的指针。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)