C语言中的链表实现

#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
    int data;
    struct Lnode *next;   
}Lnode, *LinkList;


LinkList InitList(LinkList list){     //头插法
    list = (LinkList)malloc(sizeof(Lnode));
    list->next=NULL;
    Lnode *p;
    int i=10;
    while (i>=0)
    {
        p = (LinkList)malloc(sizeof(Lnode));
        p->data=i;
        p->next = list->next;
        list->next = p;
        i--;
    }
    return list;
}

LinkList InitList2(LinkList list){     //尾插法
    list = (LinkList)malloc(sizeof(Lnode));
    Lnode *r,*s;
    int i=0;
    r =list;
    while(i<12){
        s = (Lnode*)malloc(sizeof(Lnode));
        s->data =i;
        r->next =s;
        r = s; 
        i++;
    }
    r->next = NULL;
    return list;
}


void printList(LinkList list){
    Lnode *p=list->next ;
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p = p->next;

    }
    printf("\n");
}

int containList(LinkList list,int search){
    Lnode *p = list->next;
    while(p!=NULL){
        if(p->data==search){
            return 1;
        }
        p=p->next;
    }
    return -1;
}

int insertList(LinkList list,int place,int param){
    Lnode *p = list->next;
    int i =1;
    while(p!=NULL){
        i++;
        if(i==place){
            Lnode *temp;
            temp = (Lnode*)malloc(sizeof(Lnode));
            temp->data=param;
            temp->next = p->next;
            p->next = temp;
            return 1;
        }
        p = p->next;
    }
    return -1;
}

int listDelete(LinkList list,int place){
    int i=1;
    Lnode * p=list->next;
    Lnode * temp;
    while(p!=NULL){
        if(i==place-1){
            if(p->next->next==NULL){
                free(p->next);
                p->next =NULL;
            }
            else{
                temp = p->next;
                p->next = temp->next;
                free(temp);
            }
            return 1;
        }
        i++;
        p=p->next;
    }
    return -1;
}
LinkList Reverse(LinkList list){
    Lnode * p =list->next,*temp;
    list->next = NULL;
    while(p!=NULL){
        temp=p->next;
        p->next = list->next;
        list->next = p;
        p = temp;
    }
    return list;
}

int main(){
    LinkList list,list2;
    list =InitList(list);
    printList(list);
    insertList(list,3,100);
    printList(list);
    listDelete(list,4);
    printList(list);
    list2 = InitList2(list2);
    printList(list2);
    insertList(list2,3,100);
    printList(list2);
    list=Reverse(list);
    printList(list);
    int *q;
    q = (int *)malloc(sizeof(int)*21);
    for(int i=0;i<=20;i++){
        *(q+i)=i;
    }
    for (int i = 0; i <= 20; i++)
    {
        printf("%d ",*(q+i));
    }
    
    
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值