链表的基本操作----创建、删除、排序、插入、查找、求长

本文详细介绍了如何使用C语言进行单链表的操作,包括创建链表、删除指定值的节点、计算链表长度、打印链表、冒泡排序链表以及在链表中插入和查找节点。示例中的链表仅存储int类型数据,且头节点不包含数据。

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

此博客将详细介绍单链表的创建、删除、排序、插入、查找、求长
用一个简单的单链表作为例子,此链表只存放一个int,链表头结点不存放数据

主函数

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

typedef struct node
{
    int num;             //数据域
    struct node *next;   //指针域
}Node;

int main(int argc, char const *argv[])
{
    Node *Head;
    Head=Set();     //创建链表
    /*  ···  */     //这里是所需的的其他操作
    return 0;
}

创建

输入0时结束


Node *Set(void){  
    Node *Head=(Node *)malloc(sizeof(Node));
    Head->next=NULL;
    Node *pre=NULL,*t=pre,*p;  
    while(1){  
        p=(Node *)malloc(sizeof(Node));  
        p->next=NULL;  
        scanf("%d",&p->num);  
        if(p->num==0){  
            free(p);  
            break;  
        }  
        if(pre==NULL)  
            pre=p;  
        else{  
            t->next=p;  
        }  
        t=p;  
    }  
    Head->next=pre;
    return Head;
} 

删除

删除某个值为nu所有结点

void Del(Node *Head,int nu){  
    Node *t=Head;  
    Node *p=Head->next;  
    while(p){  
        if(p->num==nu){  
            t->next=p->next;
            free(p);
            p=t->next;  //继续向后删 删除所有num=nu的结点
        }  
        else{  
            t=p;  
            p=p->next;  //若不相等,继续向后找
        }  
    }  
}  

求长

int Len(Node *Head){  
    int count=0;  
    Node *t=Head->next;  
    while(t){  
        t=t->next;  
        count++;  
    }  
    return count;  
} 

打印

根据所需打印链表的信息

void Show(Node *Head){  
    Node *t=Head->next;  
    while(t){  
        printf("%d  ",t->num);  
        t=t->next;  
    }  
    printf("\n");  
}

排序

关于排序,本人写过一篇较为详细的冒泡排序博客
单链表的冒泡排序

插入

增添结点,新节点num值为n

尾插

void Add(Node *Head,int n){  
    Node *t=Head->next;  
    Node *p=(Node *)malloc(sizeof(Node));  
    p->num=n;  
    p->next=NULL;  
    while(t->next){   
        t=t->next;  
    }  
    t->next=p;  
} 

头插

void Add2(Node *Head,int n){  
    Node *p=(Node *)malloc(sizeof(Node));  
    p->num=n;  
    p->next=Head->next;  
    Head->next=p; 
} 

查找

在链表中查找num值为n的结点,找到返回此节点,没找到返回NULL

Node *Find(Node *Head,int n){
    Node *t=Head->next;
    while(t){
        if(t->num==n)
            break;
        t=t->next;
    }
    return t;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值