📌  相关文章
📜  数据结构示例-循环链表的中间插入新节点(1)

📅  最后修改于: 2023-12-03 15:26:09.794000             🧑  作者: Mango

数据结构示例-循环链表的中间插入新节点

本文将介绍循环链表(Circular Linked List)的中间插入新节点的实现方法。

循环链表简介

循环链表是一种链式数据结构,它的特点是尾节点指向头节点,形成了一个环。循环链表的优点是可以非常方便地遍历整个链表,但是它也有一些缺点,比如插入和删除操作比较复杂。

插入新节点的实现方法

循环链表的插入操作需要分两种情况讨论:插入在表头和插入在表中间。

插入在表头

在循环链表的表头插入新节点,只需要将新节点的next指针指向原表头节点,然后将原表尾节点的next指针指向新节点即可。

struct Node* insertAtBeginning(struct Node* head, int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    if (head == NULL) {
        head = newNode;
        head->next = head;
    } else {
        struct Node* temp = head;
        while (temp->next != head) {
            temp = temp->next;
        }
        temp->next = newNode;
        newNode->next = head;
        head = newNode;
    }
    return head;
}
插入在表中间

在循环链表的表中间插入新节点,需要先找到需要插入的位置,然后将新节点的next指针指向该位置之后的节点,然后将该位置之前的节点的next指针指向新节点。

struct Node* insertAtMiddle(struct Node* head, int data, int position) {
    int i = 1;
    struct Node *newNode, *temp;
    newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    temp = head;
    while(i < position - 1) {
        temp = temp->next;
        i++;
    }
    newNode->next = temp->next;
    temp->next = newNode;
    return head;
}
总结

本文介绍了循环链表插入新节点的实现方法,并给出了相应的代码实现。循环链表虽然比较复杂,但是对于某些场景下的数据处理非常方便,可以大大提高程序的效率。