循环链表c语言实现基本操作
时间: 2024-10-14 14:01:27 浏览: 30
循环链表是一种特殊的链表结构,其中最后一个节点的next指针指向第一个节点,形成一个环形。在C语言中,我们可以用头指针来表示这个循环链表。下面是一些基本的操作:
1. 初始化循环链表:创建一个新的循环链表并设置首节点为NULL。
```c
typedef struct Node {
int data;
struct Node *next;
} Node;
Node* createCircularList() {
Node *head = NULL;
return head;
}
```
2. 插入元素:在给定位置插入新节点,需要考虑头节点的情况。
```c
void insertNode(Node** head, int data, int position) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = (*head); // 如果position=0, 新节点直接连接到头
if(position == 0)
return;
Node* current = *head;
for(int i = 1; i < position - 1 && current != NULL; ++i) {
current = current->next;
}
if(current != NULL) {
newNode->next = current->next;
current->next = newNode;
}
}
```
3. 删除元素:删除指定位置的节点,并处理循环链表的特殊性。
```c
void deleteNode(Node** head, int position) {
if(*head == NULL)
return;
if(position == 0) {
Node *temp = *head;
while(temp->next != *head) {
temp = temp->next;
}
free(*head);
*head = temp->next;
} else {
Node *current = *head;
for(int i = 1; i < position && current->next != *head; ++i) {
current = current->next;
}
if(current->next != *head) { // 避免越界
Node *toDelete = current->next;
current->next = toDelete->next;
free(toDelete);
}
}
}
```
4. 遍历循环链表:由于循环性质,我们需要检查是否已经到达尾部再继续。
```c
void display CircularList(Node* head) {
if(head == NULL)
return;
Node *current = head;
do {
printf("%d ", current->data);
current = current->next;
} while(current != head);
printf("\n");
}
```
阅读全文