链表初学(c代码实现)

#include<stdio.h>
#include<stdlib.h>
typedef struct _node{//创建链表结点
    int value;
    struct _node*next;
}Node;
typedef struct _list{//存储头、尾结点
    Node *head;
    Node *tail;
}List;

void add (List *pList,int number);//添加元素
void delete(List *pList,int number);//删除链表指定项  
void destry(List *pList);//清空链表
int main(){
    List list;//创建一个链表
    list.head=list.tail=NULL;//初始化
    int number;
    do{
        scanf("%d",&number);
        add(&list,number);
    }while(number!=-1);//向链表中读入数值
    
    Node*p;
    //链表的遍历
    // for(p=list.head;p;p=p->next){
    //     printf("%d",p->value);
    // }
    
   
  return 0;
}
//添加数字进去
void add (List *pList,int number){
    Node *p=(Node*)malloc(sizeof(Node));//创建节点p
    p->value=number;//读入数值
    p->next=NULL;//指针初始化
 
    if(pList->tail)//链表不为空
        pList->tail=pList->tail->next=p;//往尾部写入数据同时更新尾部
    
    else pList->head=pList->tail=p;//若链表为空
}
void delete(List *pList,int number){
    Node *q;//用于遍历
    Node *p;//中间指针
    for(q=NULL,p=pList->head;p;q=p,p=p->next){
        if(p->value==number){//用循环查找值为number的一项
            if(q){//考虑->左边指针不能为空!
                q->next=p->next;//核心的一部
                }
            else pList->head=p->next;//若q为空,即指向头结点,则需删除
            free(p);
            break;
        }     
    }
}
void destry(List *pList){//删除全部链表
    Node*p,*q;
    for(p=pList->head;p;p=q){
        q=p->next;
        free(p);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值