链表的简单操作

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

typedef struct LNod
{
    int data;
    struct LNod *next;
}LNode,*LinkList;

//创造N个节点的链表 头插法
int ListCreate_H(LinkList *L, int n)
{
    int j = 0;
    LinkList p;
    *L = (LNode *)malloc(sizeof(LNode));
    (*L)->next = NULL;
    
    for(j = 0;j < n;j++)
    {
        p = (LinkList)malloc(sizeof(LNode));
        scanf("%d",&(p->data));
        
        p->next = (*L)->next;
        (*L)->next = p;
    }

    return 1;
}

//创造N个节点的链表 尾插法
int ListCreate(LinkList *L, int n)
{
    LinkList p,q;
    int i = 0;

    *L = (LNode *)malloc(sizeof(LNode));
    (*L)->next = NULL;
    q = *L;

    for(i = 0;i < n;i++)
    {
        p = (LinkList)malloc(sizeof(LNode));
        scanf("%d",&(p->data));
        q->next = p;
        q = p;
    }

    q->next = NULL;

    return 1;
}

//打印链表上所有节点的数据
int ListShow(LinkList L)
{
    LinkList q = L->next;

    while(NULL != q)
    {
        printf("%d\n",q->data);
        q = q->next;
    }
    return 1;
}

//在pos位置插入一个数据为e的节点
int ListInsert(LinkList L,int pos,int e)
{
    int j = 1;
    LinkList p = L->next;
    LinkList s;
    while(NULL != p && j < pos - 1)
    {
        p = p->next;
        j++;
    }
    if(NULL == p)
    {
        printf("error\n");
        return 0;
    }

    s = (LinkList)malloc(sizeof(LNode));
    s->data = e;
    s->next = p->next;
    p->next = s;

    return 1;
}

//删除链表中pos位置的节点,获得被释放节点的数据
int ListDel(LinkList L,int pos,int *e)
{
    LinkList p = L->next;
    LinkList q;
    int j = 1;

    while(NULL != p && j < pos)
    {
        q = p;
        p = p->next;
        j++;
    }

    q->next = p->next;
    *e = p->data;

    free(p);
    p = NULL;

    return 1;
}

//获取链表中pos位置的节点数据
int ListGetData(LinkList L,int pos,int *e)
{

}

//查找链表中是否存在数据e 存在返回位置。不存在返回0
int ListDataLocate(LinkList L,int e)
{
    LinkList p;
    LinkList q;
    while(p->next=NULL)

}

//清空链表
int ListClear(LinkList L)
{
    LinkList p;
    LinkList q;
    if(L == NULL)
    {
        return 0;
        p = L->next;
    }
    while(p != NULL)
    {
        q = p->next;
        free(p);
        p = q;
    }
    L->next = NULL;
    return 1;
}

//销毁链表
int ListDestory(LinkList *L)
{
    LinkList p;
    if(L == NULL)
    {
        return 0;
        
    
    }
    while(L)
    {
        p = L->next;
        free(L);
        L = p;

    }
    return 1;

}

void main()
{
    LinkList L;
    int i;


    ListCreate(&L, 5);
    ListShow(L);
//istInsert(L,3,555);
    ListDel(L,3,&i);
    printf("i = %d\n",i);
    ListShow(L);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值