编辑代码

#include <stdio.h>
#include <stdlib.h>
// 节点结构体
typedef struct Node {
    int data;
    struct Node* next;
} Node;
// 单链表结构体
typedef struct LinkedList {
    Node* head;
} LinkedList;
// 初始化单链表
void init_list(LinkedList* list, int data[], int size) {
    list->head = (Node*)malloc(sizeof(Node));
    Node* p = list->head;
    for (int i = 0; i < size; i++) {
        Node* new_node = (Node*)malloc(sizeof(Node));
        new_node->data = data[i];
        new_node->next = NULL;
        p->next = new_node;
        p = p->next;
    }
}
// 单链表的取值方法
int get_value(LinkedList* list, int index) {
    Node* p = list->head->next;
    int i = 0;
    while (p && i < index) {
        p = p->next;
        i++;
    }
    if (!p) {
        printf("Index out of range\n");
        return -1;
    }
    return p->data;
}
// 单链表的查找方法
int find_value(LinkedList* list, int value) {
    Node* p = list->head->next;
    int index = 0;
    while (p) {
        if (p->data == value) {
            return index;
        }
        p = p->next;
        index++;
    }
    return -1;
}
// 单链表的插入方法
void insert_value(LinkedList* list, int index, int value) {
    Node* p = list->head;
    int i = 0;
    while (p && i < index) {
        p = p->next;
        i++;
    }
    if (!p) {
        printf("Index out of range\n");
        return;
    }
    Node* new_node = (Node*)malloc(sizeof(Node));
    new_node->data = value;
    new_node->next = p->next;
    p->next = new_node;
}
// 单链表的删除方法
void delete_value(LinkedList* list, int value) {
    Node* p = list->head;
    while (p->next) {
        if (p->next->data == value) {
            Node* temp = p->next;
            p->next = p->next->next;
            free(temp);
            return;
        }
        p = p->next;
    }
    printf("Value not found\n");
}
// 主函数测试
int main() {
    int data[] = {1, 2, 3, 4, 5};
    int size = sizeof(data) / sizeof(data[0]);
    LinkedList list;
    
    // 初始化单链表
    init_list(&list, data, size);
    
    // 取值方法测试
    printf("Value at index 2: %d\n", get_value(&list, 2));
    
    // 查找方法测试
    printf("Index of value 3: %d\n", find_value(&list, 3));
    
    // 插入方法测试
    insert_value(&list, 2, 10);
    printf("After inserting 10 at index 2: ");
    for (int i = 0; i < size + 1; i++) {
        printf("%d ", get_value(&list, i));
    }
    printf("\n");
    
    // 删除方法测试
    delete_value(&list, 3);
    printf("After deleting value 3: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", get_value(&list, i));
    }
    printf("\n");
    
    return 0;
}