编辑代码

#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 插入节点
void insert(Node** head, int data, int position) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    if (position == 1) {
        if (*head == NULL) {
            *head = newNode;
            newNode->next = newNode;
        } else {
            Node* temp = *head;
            while (temp->next != *head) {
                temp = temp->next;
            }
            newNode->next = *head;
            temp->next = newNode;
            *head = newNode;
        }
    } else {
        Node* temp = *head;
        for (int i = 1; i < position - 1 && temp->next != *head; i++) {
            temp = temp->next;
        }
        newNode->next = temp->next;
        temp->next = newNode;
    }
}

// 删除节点
void delete(Node** head, int position) {
    if (*head == NULL) return;
    Node* temp = *head;
    if (position == 1) {
        while (temp->next != *head) {
            temp = temp->next;
        }
        Node* toDelete = *head;
        if (*head == (*head)->next) {
            *head = NULL;
        } else {
            temp->next = (*head)->next;
            *head = (*head)->next;
        }
        free(toDelete);
    } else {
        for (int i = 1; i < position - 1 && temp->next != *head; i++) {
            temp = temp->next;
        }
        Node* toDelete = temp->next;
        temp->next = toDelete->next;
        free(toDelete);
    }
}

// 查找节点
Node* search(Node* head, int data) {
    Node* temp = head;
    do {
        if (temp->data == data) return temp;
        temp = temp->next;
    } while (temp != head);
    return NULL;
}


void insert(Node** head, int data, int position);
void delete(Node** head, int position);
Node* search(Node* head, int data);

// 打印链表
void printList(Node* head) {
    if (head == NULL) {
        printf("List is empty.\n");
        return;
    }
    Node* temp = head;
    do {
        printf("%d -> ", temp->data);
        temp = temp->next;
    } while (temp != head);
    printf("(head)\n");
}

int main() {
    Node* head = NULL;

    // 测试插入节点
    insert(&head, 10, 1);
    insert(&head, 20, 2);
    insert(&head, 30, 3);
    insert(&head, 5, 1); // 插入到头部
    insert(&head, 25, 3); // 插入到中间
    printf("After insertions: ");
    printList(head);

    // 测试查找节点
    Node* found = search(head, 20);
    if (found != NULL) {
        printf("Node with data 20 found.\n");
    } else {
        printf("Node with data 20 not found.\n");
    }

    // 测试删除节点
    delete(&head, 1); // 删除头部节点
    delete(&head, 3); // 删除中间节点
    printf("After deletions: ");
    printList(head);

    // 清理内存
    while (head != NULL) {
        delete(&head, 1);
    }

    return 0;
}