链表-笔记

本文详细介绍了链表的基本概念及其实现方法,包括链表的插入、删除和遍历等核心操作,并提供了完整的C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 特点:链表的元素不能随机访问,一般只有一个表头。

           链表是串联的,内存中不一定是顺序的,所以不能随机访问。

           链表的元素是串联且前一个元素链接后一个元素。

#include <stdio.h>
#include <stdlib.h>
//结点结构体
typedef struct Node {
    int data; //结点数据
    struct Node *next;//下一节点指针 
}Node,*LinkedList;
//clear清空函数
void clear(LinkedList head) {
    Node *current_node = head;  //建立指向头结点的当前结点
    while (current_node != NULL) {
        Node *delete_node = current_node;  //清除的结点为当前结点
        current_node = current_node->next;  //结点指向下一个结点位置
        free(delete_node);  
    }
}
//插入函数
LinkedList insert(LinkedList head,Node*node,int index){
   //边界判断先分析头结点是否为空
   if(head==NULL){
       if(index!=0){
         return head;  
      }
           head=node;
            return head;
    }
     //插入在头指针位置
    if(index==0){
            node->next=head;
             head=node;
             return head;
    }
         //创建当前结点
           Node* current_node=head;
         //计算结点数
         int count=0;
 while(current_node->next!=NULL&&count<index-1){
        current_node=current_node->next;
        count++;
    }
     if(count==index-1){
         node->next=current_node->next;
         current_node->next=node;
     }
    return head;
 }
//遍历链表
void output(LinkedList head){
   //先判断链表是否为空       
 if(head==NULL){
            return;
        }
      
       Node *current_node=head;
       while(current_node!=NULL){
           printf("%d ",current_node->data);
           current_node=current_node->next;
           
       }
printf("%d",current_node->data); }
//删除结点
LinkedList delete_node(LinkedList head,int index){
   //判断是否为空
    if(head==NULL){
        return head;
    }
    Node* current_node=head;
    int count=0;
    if(index==0){
        head=head->next;
        free(current_node);
        return head;
    }
    while(current_node->next != NULL && count < index - 1){
          current_node=current_node->next;
           count++;
    }
    if(count==index-1&&current_node->next!=NULL){
        Node*delete_node=current_node->next;
        current_node->next=delete_node->next;
        free(delete_node);
    }
    return head;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值