#include <stdio.h>
#include <stdlib.h>

//定义链表结点结构体
typedef struct node {
    int data;
    struct node *next;
} Node;

//创建链表
Node *createList() {
    Node *head = (Node*)malloc(sizeof(Node));
    head->next = NULL;
    return head;
}

//插入结点
void insertNode(Node *head, int pos, int data) {
    Node *p = head;
    int i = 0;
    while (p && i < pos - 1) {
        p = p->next;
        i++;
    }
    if (!p || i > pos - 1) {
        printf('插入位置有误!\n');
        return;
    }
    Node *newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = p->next;
    p->next = newNode;
}

//删除结点
void deleteNode(Node *head, int pos) {
    Node *p = head;
    int i = 0;
    while (p->next && i < pos - 1) {
        p = p->next;
        i++;
    }
    if (!p->next || i > pos - 1) {
        printf('删除位置有误!\n');
        return;
    }
    Node *delNode = p->next;
    p->next = delNode->next;
    free(delNode);
}

//显示链表
void displayList(Node *head) {
    Node *p = head->next;
    while (p) {
        printf('%d ', p->data);
        p = p->next;
    }
    printf('\n');
}

int main() {
    Node *head = createList();
    int choice, pos, data;
    while (1) {
        printf('1.插入结点\n2.删除结点\n3.显示链表\n4.退出程序\n');
        printf('请选择操作:');
        scanf('%d', &choice);
        switch (choice) {
            case 1:
                printf('请输入要插入的位置和元素:');
                scanf('%d %d', &pos, &data);
                insertNode(head, pos, data);
                break;
            case 2:
                printf('请输入要删除的位置:');
                scanf('%d', &pos);
                deleteNode(head, pos);
                break;
            case 3:
                displayList(head);
                break;
            case 4:
                exit(0);
            default:
                printf('输入有误,请重新选择!\n');
                break;
        }
    }
    return 0;
}
C语言链表操作:创建、插入、删除和显示

原文地址: https://www.cveoy.top/t/topic/nran 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录