单链表的简单操作

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0

typedef int Status;

typedef struct Lnode
{
    int data;
    struct Lnode *next;
}Lnode, *Linklist;

int m = sizeof(Lnode);

Linklist CreateList(int n)
{
    Linklist s, L;
    L = (Linklist)malloc(m);
    L->next = NULL;
    while(n--)
    {
        s = (Linklist)malloc(m);
        scanf("%d", &s->data);
        s->next = L->next;
        L->next = s;
    }
    return L;
}

void TraverseList(Linklist L)
{
    Linklist p = L->next;
    while(p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("
");
}

Status ListInsert(Linklist L, int i, int e)
{
    int j = 1;
    Linklist p, s, s1;
    p = L;
    s = L->next;
    while(s && j < i)
    {
        p = s;
        s = s->next;
        j++;
    }
    if((s == NULL && j < i) || i < 1)
        return ERROR;
    s1 = (Linklist)malloc(m);
    s1->data = e;
    s1->next = p->next;
    p->next = s1;
    return OK;
}


Status ListDel(Linklist L, int i)
{
    Linklist p = L, s = L->next;
    int j = 1;
    while(s && j < i)
    {
        p = s;
        s = s->next;
        j++;
    }
    if((s == NULL && j < i) || i < 1)
        return ERROR;
    p->next = s->next;
    free(s);
    return OK;
}

int main()
{
    int n, k, x, y;
    Linklist L;
    scanf("%d", &n);
    L = CreateList(n);
    printf("生成的数组是:
");
    TraverseList(L);
    scanf("%d", &k);
    ListDel(L, k);
    printf("删除后得到:
");
    TraverseList(L);
    scanf("%d%d", &x, &y);
    ListInsert(L, x, y);
    printf("插入后得到:
");
    TraverseList(L);
    return 0;
}
原文地址:https://www.cnblogs.com/qq2424260747/p/4864186.html