单循环链表更新代码C语言
时间: 2023-05-30 22:02:18 浏览: 111
单链表,c语言程序
5星 · 资源好评率100%
以下是单循环链表的更新代码示例,包括在指定位置插入节点、删除指定位置节点和修改指定位置节点的值:
```
// 定义单循环链表节点结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
// 在指定位置插入节点
void insertNode(Node **head, int pos, int val) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = val;
newNode->next = NULL;
if (*head == NULL) { // 链表为空
*head = newNode;
(*head)->next = *head;
return;
}
if (pos == 1) { // 在头部插入节点
newNode->next = *head;
Node *tail = *head;
while (tail->next != *head) {
tail = tail->next;
}
tail->next = newNode;
*head = newNode;
return;
}
Node *prev = NULL;
Node *curr = *head;
int i = 1;
while (i < pos && curr->next != *head) { // 在指定位置插入节点
prev = curr;
curr = curr->next;
i++;
}
prev->next = newNode;
newNode->next = curr;
}
// 删除指定位置节点
void deleteNode(Node **head, int pos) {
if (*head == NULL) { // 链表为空
return;
}
if (pos == 1) { // 删除头节点
Node *tail = *head;
while (tail->next != *head) {
tail = tail->next;
}
*head = (*head)->next;
tail->next = *head;
free(*head);
return;
}
Node *prev = NULL;
Node *curr = *head;
int i = 1;
while (i < pos && curr->next != *head) { // 删除指定位置节点
prev = curr;
curr = curr->next;
i++;
}
if (curr->next == *head) { // 如果删除的是尾节点
prev->next = *head;
free(curr);
} else {
prev->next = curr->next;
free(curr);
}
}
// 修改指定位置节点的值
void modifyNode(Node *head, int pos, int val) {
if (head == NULL) { // 链表为空
return;
}
Node *curr = head;
int i = 1;
while (i < pos && curr->next != head) { // 找到指定位置节点
curr = curr->next;
i++;
}
if (i == pos) { // 找到节点
curr->data = val;
}
}
```
阅读全文