简单链表的创建以及增删

#include <stdio.h>

#include <stdlib.h>

typedef struct LNode

{

    char data;

    struct LNode *next;

} LNode;                        // 结构定义

typedef struct LNode *LinkList; // 指针类型定义

LinkList creat_Link_List(int n)

{

    int i;

    LinkList head, p, q;

    if (n == 0)

        return NULL;

    head = (LinkList)malloc(sizeof(LNode));

    p = head;

    printf("Please input %d chars for the link list\n", n);

    for (i = 0; i < n; i++)

    {

        q = (LinkList)malloc(sizeof(LNode));

        scanf("%c", &(q->data));

        getchar();

        q->next = NULL;

        p->next = q;

        p = q;

    }

    return (head);

} // 创造一个结点数为n的链表

void insert_Qian(LinkList L, char a, char b)

{

    LinkList p, q;

    q = (LinkList)malloc(sizeof(LNode));

    q->data = b;

    q->next = NULL;

    if (L == NULL)

        L = q;

    else

    {

        p = L;

        while (p->next->data != a && p->next != NULL)

        {

            p = p->next;

        }

        if (p->next->data = a)

        {

            q->next = p->next;

            p->next = q;

        }

        else

        {

            p->next = q;

        }

    }

} // 在值为a的结点之前插入一个值为b的结点,如果该结点不存在,则将其插入列表的末尾

int deletenode(LinkList L, char a)

{

    LinkList p, q;

    q = L;

    if (q == NULL)

        return 1;

    if (q->data == a)

    {

        L = q->next;

        free(q);

        return 0;

    }                        

    else

    {

        while (q->data != a && q->next != NULL)

        {

            p = q;

            q = q->next;

            if (q->data == a)

            {

                p->next = q->next;

                free(q);

                return 0;

            }

           

        }

    }

} // 删除值为a的节点

int main()

{

    LinkList creat_Link_List(int n);

    void insert_Qian(LinkList L, char a, char b);

    int deletenode(LinkList L, char a);

    LinkList L, p;

    int m;

    char c, d;

    printf("Please input the number of nodes for the link_list \n m=");

    scanf("%d", &m);

    getchar();

    // L=(LinkList) malloc(sizeof(LNode));

    L = creat_Link_List(m);

    printf("The Link list is like:\n");

    p = L;

    p=p->next;

    while (p != NULL)

    {

        printf("%c", p->data);

        p = p->next;

    }

    printf("\n");

    printf("Please input the position for a\nc=");

    scanf("%c", &c);

    getchar();

    printf("please input the value that you want to insert\nd=");

    scanf("%c", &d);

    getchar();

    insert_Qian(L, c, d);

    printf("The link list after insertion is like:\n");

    p = L;

    p=p->next;

    while (p != NULL)

    {

        printf("%c", p->data);

        p = p->next;

    }

    printf("\n");

    printf("Please input the position for a a=");

    scanf("%c", &c);

    getchar();

    deletenode(L, c);

    p = L;

    p=p->next;

    while (p != NULL)

    {

        printf("%c", p->data);

        p = p->next;

    }

    return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值