单链表的基本操作(详细)

目录

0.本帖的内容:

1.单链表的定义

2.初始化

3.这个帖子中的功能(函数块)

4.利用为尾插法创建单链表

5.打印单链表

6.在带有头结点的单链表L中第i个位置之前的插入元素e

7.当第i个元素存在时,把第i个元素赋值给e并返回ok

8.修改第i个元素的值为e

9.判断一个单链表是否为空

10.摧毁单链表

11.求单链表表长

12.求第i个元素的直接前驱

13.求第i个元素的直接后继

14.求元素X的直接前驱(求X的前一个元素)

15.求元素X的直接后继(求X的后一个元素)

16.功能选择函数

17.全部代码

运行样例测试:


0.本帖的内容:

void show()
{
    printf("\t*************以下为整个程序的功能区*************\n");
    printf("\t0.退出此程序\n");
    printf("\t1.打印单链表\n");
    printf("\t2.在带有头结点的单链表L中第i个位置之前的插入元素e\n");
    printf("\t3.删除L的第i个数据元素,并用e返回其值\n");
    printf("\t4.当第i个元素存在时,把第i个元素赋值给e并返回ok\n");
    printf("\t5.建表\n");  
    printf("\t6.修改第i个元素的值为e,\n"); 
    printf("\t7.判断一个单链表是否为空\n");
    printf("\t8.摧毁单链表\n");
    printf("\t9.求单链表表长\n");
    printf("\t10.求第i个元素的直接前驱\n");
    printf("\t11.求第i个元素的直接后继\n");
    printf("\t12.求元素X的直接前驱(求X的前一个元素)(单链表中数字不重复时使用)\n");
    printf("\t13.求元素X的直接后继(求X的后一个元素)(单链表中数字不重复时使用)\n");
}

1.单链表的定义

typedef struct Lnode 
{
    int data;
    struct Lnode *next;
}Lnode,*LinkList;

2.初始化

        如果是带有头结点的单链表就使用L->next=NULL;

        如果是没有头结点的单链表使用L=NULL;

L->next=NULL;
L=NULL;

3.这个帖子中的功能(函数块)

//函数区
LinkList Create();                                      //利用为尾插法创建单链表;
void print(LinkList L);                                 //打印单链表;
Status ListInsert_L(LinkList L,int i,int e);            //在带有头结点的单链表L中第i个位置之前的插入元素e;
void show();                                            //输出功能表函数;
Status GetElem_L(LinkList L,int i,int *e);              //当第i个元素存在时,把第i个元素赋值给e并返回ok;
Status ListDelete_L(LinkList L,int i,int *e);           //在带有头结点的单链表L中,删除第i个元素,并由e返回其值;
void swi(LinkList L);                                   //switch选择函数;
Status Recompose_L(LinkList L,int i,int e,int *q);      //修改第i个元素的值为e;
void ListEmpty_L(LinkList L);                           //判断一个单链表是否为空;
void DestroyList_L(LinkList L);                         //摧毁单链表;
Status PriorElem_L(LinkList L,int i,int e);             //求第i个元素的直接前驱;
Status NextElem_L(LinkList L,int i);                    //求第i个元素的直接后继;
Status LenthList_L(LinkList L);                         //求表长;
Status PriorElem_L_X(LinkList L,int e);                 //求元素X的直接前驱(求x的前一个元素);
Status NextElem_L_X(LinkList L,int e);                  //求元素X的直接后继(求X的后一个元素);

4.利用为尾插法创建单链表

        输入数值为-1即可暂停输入

//利用为尾插法创建单链表
LinkList Create()
{
    LinkList L,p,s;
    int e;
    L = (LinkList)malloc(sizeof(Lnode));
    L->next=NULL;
    p=L;
    printf("请输入表内数据(每个以空格隔开,以-1为值进行结束输入):\n");
    scanf("%d",&e);
    while(e!=-1)
    {
        s = (LinkList)malloc(sizeof(Lnode));
        s->data=e;
        p->next=s;
        p=s;
        scanf("%d",&e);
    }
        p->next=NULL;
        return L;
}

5.打印单链表

        利用while循环

//打印单链表
void print(LinkList L)
{ 
    LinkList p;
    p=L->next;
    printf("表内数据为:\n");
    while (p)
    {
         printf("%d ", p->data);
         p =p->next;
    }
}

6.在带有头结点的单链表L中第i个位置之前的插入元素e

        为s开辟空间,然后利用计数器确定位置。

Status ListInsert_L(LinkList L,int i,int e)
{
    LinkList p,s;
    int j;
    int rrr;
    rrr = LenthList_L(L);
    if(i<(rrr+1)&&i>0)
    {
        p=L->next;j=1;
        while(p&&j<i-1)
        {
            p=p->next;++j;
        }
        if(!p||j>i-1) return ERROR;
        s=(LinkList)malloc(sizeof(Lnode));
        s->data = e;s->next = p->next;
        p->next = s;
        return OK;
    }else{
        printf("插入位置有误\n\n");
    }
}

7.当第i个元素存在时,把第i个元素赋值给e并返回ok

Status GetElem_L(LinkList L,int i,int *e)
{
    LinkList p;
    int j;
    int tt=LenthList_L(L);
    if(i<=tt&&i>0)
    {
    p = L->next;
    j=1;
    while(p&&j<i)
    {
        p=p->next;++j;
    }
    //if(!p||j>i) return ERROR;
    *e = p -> data;
    printf("第%d个元素是%d\n",i,*e);
    return OK;
    }else{
        printf("输入有错\n");
    }
}

8.修改第i个元素的值为e

Status Recompose_L(LinkList L,int i,int e,int *q)
{
    LinkList p;
    p=L->next;
    int j=1;
    while(p&&j<i)
    {
        p=p->next;
        ++j;
    }
    if(!p&&j>=i) 
        return ERROR;
    *q=p->data;
    p->data= e;
    return OK;
}

9.判断一个单链表是否为空

void ListEmpty_L(LinkList L)
{
    if(L->next!=NULL)
        printf("这个单链表不是空表\n");
    else
        printf("这个单链表是空表\n");
}

10.摧毁单链表

void DestroyList_L(LinkList L)
{
    LinkList p;
    while(L)
    {
        p=L;
        L=L->next;
        free(p);
    }
    printf("单链表已经摧毁\n");
}

11.求单链表表长

Status LenthList_L(LinkList L)
{
    LinkList p=L->next;
    int i=1;
    while(p->next!=NULL)
    {
        p=p->next;
        ++i;
    }
    return i;
}

12.求第i个元素的直接前驱

Status PriorElem_L(LinkList L,int i,int e)
{
    LinkList p,q;
    int j=1;
    if(i==1){
        printf("这个表没有前驱\n");
    }else{
    p=L->next;
    while(p!=NULL&&j!=i)
    {
        q=p;
        p=p->next;
        j++;
    }
    printf("第%d个元素的直接前驱是%d",i,q->data);
    }
}

13.求第i个元素的直接后继

Status NextElem_L(LinkList L,int i)
{
    LinkList p=L->next;
    int j=1;
    while(j!=i&&p!=NULL)
    {
        p=p->next;
        j++;
    }
    if(j>i)
    {
        printf("这个表没有直接后继\n");
    }else{
        p=p->next;
        printf("第%d个元素的直接后继是%d",i,p->data);
    }   
}

14.求元素X的直接前驱(求X的前一个元素)

Status PriorElem_L_X(LinkList L,int e)
{
    LinkList p,q;
    p=L->next;
    if(p->data==e)
    {
        printf("没有前驱\n");
    }
    while(p&&p->data!=e)
    {
        q=p;
        p=p->next;
    }
    printf("%d的直接前驱是%d\n",e,q->data);
}

15.求元素X的直接后继(求X的后一个元素)

Status NextElem_L_X(LinkList L,int e)
{
    LinkList p=L->next;
    while(p&&p->data!=e)
    {
        p=p->next;
    }
    if(p->next==NULL)
    {
        printf("这个数字没有直接后继\n");
    }
    p=p->next;
    printf("%d的直接后继元素是%d\n",e,p->data);
}

16.功能选择函数

void swi(LinkList L)
{
    int num;
    printf("请输入功能数字:");
    scanf("%d",&num);
    while(num)
    {
        switch(num)
        {
            case 0:
                num=0;
                break;
            case 1:
                if(L==NULL)
                {
                    printf("在执行操作一之前必须执行操作5(建表)\n");
                }else{
                    print(L);
                    }
                    printf("\n");
            break;
            case 2:
                if(L==NULL)
                {
                    printf("在执行操作二之前必须执行操作5(建表)\n");
                }else{
                    printf("选择的功能是:在带有头结点的单链表L中第i个位置之前的插入元素e\n");
                    printf("请输入你想插入的位置和插入的元素:");
                    int a,b;
                    scanf("%d%d",&a,&b);
                    ListInsert_L(L,a,b);
                    printf("插入操作已经结束\n");
                    }
                    printf("\n");
            break;
            case 3:
                if(L==NULL)
                {
                    printf("在执行操作三之前必须执行操作5(建表)\n");
                }else{
                    printf("删除L的第i个数据元素,并用e返回其值\n");
                    printf("请输入删除位置:");
                    int c,d;
                    scanf("%d",&c);
                    ListDelete_L(L,c,&d);
                    printf("删除元素为%d\n",d);
                    }
                    printf("\n");
            break;
            case 4:
                if(L==NULL)
                {
                    printf("在执行操作四之前必须执行操作5(建表)\n");
                }else{
                    printf("当第i个元素存在时,把第i个元素赋值给e并返回ok\n");
                    printf("请输入第i个位置:");
                    int f,g;
                    scanf("%d",&f);
                    GetElem_L(L,f,&g);
                    //printf("第%d个元素是%d\n",f,g);
                    }
                    printf("\n");
                break;
            case 5:
                L=Create();
                printf("链表建立成功\n");
                printf("\n");
            break;
            case 6:
                if(L==NULL)
                {
                    printf("在执行操作六之前必须执行操作5(建表)\n");
                }else{
                    printf("修改第i个元素为x\n");
                    printf("请输入i,x的值:");
                    int k,l,q;
                    scanf("%d%d",&k,&l);
                    Recompose_L(L,k,l,&q);
                    printf("把第%d的位置修改成了%d,用%d替换了%d",k,l,l,q);
                }
                printf("\n");
            break;
            case 7:
                if(L==NULL)
                {
                    printf("在执行操作七之前必须执行操作5(建表)\n");
                }else{
                    ListEmpty_L(L);
                }
                printf("\n");
            break;
            case 8:
                if(L==NULL)
                {
                    printf("在执行操作八之前必须执行操作5(建表)\n");
                }else{                
                    DestroyList_L(L);
                    L=NULL;
                }
                printf("\n");
                break;
            case 9:
                if(L==NULL)
                {
                    printf("在执行操作九之前必须执行操作5(建表)\n");
                }else{
                    int jj = LenthList_L(L);
                printf("链表的长度为%d\n",jj);
                }
                printf("\n");
                break;
            case 10:
                if(L==NULL)
                {
                    printf("在执行操作十之前必须执行操作5(建表)\n");
                }else{
                int m,r;
                printf("请输入第i个元素的i:\n");
                scanf("%d",&m);            
                PriorElem_L(L,m,r);
                }
                printf("\n");
                break;
            case 11:
                if(L==NULL)
                {
                    printf("在执行操作十一之前必须执行操作5(建表)\n");
                }else{
                int gg,hh;
                printf("请输入第i个元素的i:\n");
                scanf("%d",&gg);            
                NextElem_L(L,gg);
                } 
                printf("\n");
            break;
            case 12:
                if(L==NULL)
                {
                    printf("在执行操作十二之前必须执行操作5(建表)\n");
                }else{
                    int qq;
                    printf("请输入你想要搜到的数字\n");
                    scanf("%d",&qq);
                    PriorElem_L_X(L,qq);
                }                     
                printf("\n");  
            break;
            case 13:
                if(L==NULL)
                {
                    printf("在执行操作十三之前必须执行操作5(建表)\n");
                }else{
                    int ww;
                    printf("请输入你想要搜到的数字\n");
                    scanf("%d",&ww);
                    NextElem_L_X(L,ww);
                    
                }
                printf("\n");
            break;
            default:

                printf("输入有误\n");
                printf("\n");
            break;
        }
        show();
        printf("\n\n请在此输入功能数字\n");
        scanf("%d",&num);
    }
}

17.全部代码

//define区
#define List_Init_Size 100
#define List_Increment 10
#define OK 1
#define OVERFLOW -2
#define ERROR 0

//预处理指令区
#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<windows.h>

//typedef 
typedef int Status;
typedef struct Lnode 
{
    int data;
    struct Lnode *next;
}Lnode,*LinkList;

//函数区
LinkList Create();                                      //利用为尾插法创建单链表;
void print(LinkList L);                                 //打印单链表;
Status ListInsert_L(LinkList L,int i,int e);            //在带有头结点的单链表L中第i个位置之前的插入元素e;
void show();                                            //输出功能表函数;
Status GetElem_L(LinkList L,int i,int *e);              //当第i个元素存在时,把第i个元素赋值给e并返回ok;
Status ListDelete_L(LinkList L,int i,int *e);           //在带有头结点的单链表L中,删除第i个元素,并由e返回其值;
void swi(LinkList L);                                   //switch选择函数;
Status Recompose_L(LinkList L,int i,int e,int *q);      //修改第i个元素的值为e;
void ListEmpty_L(LinkList L);                           //判断一个单链表是否为空;
void DestroyList_L(LinkList L);                         //摧毁单链表;
Status PriorElem_L(LinkList L,int i,int e);             //求第i个元素的直接前驱;
Status NextElem_L(LinkList L,int i);                    //求第i个元素的直接后继;
Status LenthList_L(LinkList L);                         //求表长;
Status PriorElem_L_X(LinkList L,int e);                 //求元素X的直接前驱(求x的前一个元素);
Status NextElem_L_X(LinkList L,int e);                  //求元素X的直接后继(求X的后一个元素);



//主函数
int main()
{   
    char Q;
    printf("如果想要开始程序,请输入Y或者y,如果不开始可以输入其他,直接退出\n");
    scanf("%c",&Q);
    if(Q=='y'||Q=='Y')
    {
    LinkList L=NULL;
    show();
    swi(L);
    printf("\n2秒钟后退出,请稍候。。。。");
    Sleep(2000);
    return 0;
    }else{
        printf("程序截止\n");
    }
 
}

//利用为尾插法创建单链表
LinkList Create()
{
    LinkList L,p,s;
    int e;
    L = (LinkList)malloc(sizeof(Lnode));
    L->next=NULL;
    p=L;
    printf("请输入表内数据(每个以空格隔开,以-1为值进行结束输入):\n");
    scanf("%d",&e);
    while(e!=-1)
    {
        s = (LinkList)malloc(sizeof(Lnode));
        s->data=e;
        p->next=s;
        p=s;
        scanf("%d",&e);
    }
        p->next=NULL;
        return L;
}

//打印单链表
void print(LinkList L)
{ 
    LinkList p;
    p=L->next;
    printf("表内数据为:\n");
    while (p)
    {
         printf("%d ", p->data);
         p =p->next;
    }
}

//在带有头结点的单链表L中第i个位置之前的插入元素e;
Status ListInsert_L(LinkList L,int i,int e)
{
    LinkList p,s;
    int j;
    int rrr;
    rrr = LenthList_L(L);
    if(i<(rrr+1)&&i>0)
    {
        p=L->next;j=1;
        while(p&&j<i-1)
        {
            p=p->next;++j;
        }
        if(!p||j>i-1) return ERROR;
        s=(LinkList)malloc(sizeof(Lnode));
        s->data = e;s->next = p->next;
        p->next = s;
        return OK;
    }else{
        printf("插入位置有误\n\n");
    }
}

//输出功能表函数
void show()
{
    printf("\t*************以下为整个程序的功能区*************\n");
    printf("\t0.退出此程序\n");
    printf("\t1.打印单链表\n");
    printf("\t2.在带有头结点的单链表L中第i个位置之前的插入元素e\n");
    printf("\t3.删除L的第i个数据元素,并用e返回其值\n");
    printf("\t4.当第i个元素存在时,把第i个元素赋值给e并返回ok\n");
    printf("\t5.建表\n");  
    printf("\t6.修改第i个元素的值为e,\n"); 
    printf("\t7.判断一个单链表是否为空\n");
    printf("\t8.摧毁单链表\n");
    printf("\t9.求单链表表长\n");
    printf("\t10.求第i个元素的直接前驱\n");
    printf("\t11.求第i个元素的直接后继\n");
    printf("\t12.求元素X的直接前驱(求X的前一个元素)(单链表中数字不重复时使用)\n");
    printf("\t13.求元素X的直接后继(求X的后一个元素)(单链表中数字不重复时使用)\n");
}

//switch选择函数
void swi(LinkList L)
{
    int num;
    printf("请输入功能数字:");
    scanf("%d",&num);
    while(num)
    {
        switch(num)
        {
            case 0:
                num=0;
                break;
            case 1:
                if(L==NULL)
                {
                    printf("在执行操作一之前必须执行操作5(建表)\n");
                }else{
                    print(L);
                    }
                    printf("\n");
            break;
            case 2:
                if(L==NULL)
                {
                    printf("在执行操作二之前必须执行操作5(建表)\n");
                }else{
                    printf("选择的功能是:在带有头结点的单链表L中第i个位置之前的插入元素e\n");
                    printf("请输入你想插入的位置和插入的元素:");
                    int a,b;
                    scanf("%d%d",&a,&b);
                    ListInsert_L(L,a,b);
                    printf("插入操作已经结束\n");
                    }
                    printf("\n");
            break;
            case 3:
                if(L==NULL)
                {
                    printf("在执行操作三之前必须执行操作5(建表)\n");
                }else{
                    printf("删除L的第i个数据元素,并用e返回其值\n");
                    printf("请输入删除位置:");
                    int c,d;
                    scanf("%d",&c);
                    ListDelete_L(L,c,&d);
                    printf("删除元素为%d\n",d);
                    }
                    printf("\n");
            break;
            case 4:
                if(L==NULL)
                {
                    printf("在执行操作四之前必须执行操作5(建表)\n");
                }else{
                    printf("当第i个元素存在时,把第i个元素赋值给e并返回ok\n");
                    printf("请输入第i个位置:");
                    int f,g;
                    scanf("%d",&f);
                    GetElem_L(L,f,&g);
                    //printf("第%d个元素是%d\n",f,g);
                    }
                    printf("\n");
                break;
            case 5:
                L=Create();
                printf("链表建立成功\n");
                printf("\n");
            break;
            case 6:
                if(L==NULL)
                {
                    printf("在执行操作六之前必须执行操作5(建表)\n");
                }else{
                    printf("修改第i个元素为x\n");
                    printf("请输入i,x的值:");
                    int k,l,q;
                    scanf("%d%d",&k,&l);
                    Recompose_L(L,k,l,&q);
                    printf("把第%d的位置修改成了%d,用%d替换了%d",k,l,l,q);
                }
                printf("\n");
            break;
            case 7:
                if(L==NULL)
                {
                    printf("在执行操作七之前必须执行操作5(建表)\n");
                }else{
                    ListEmpty_L(L);
                }
                printf("\n");
            break;
            case 8:
                if(L==NULL)
                {
                    printf("在执行操作八之前必须执行操作5(建表)\n");
                }else{                
                    DestroyList_L(L);
                    L=NULL;
                }
                printf("\n");
                break;
            case 9:
                if(L==NULL)
                {
                    printf("在执行操作九之前必须执行操作5(建表)\n");
                }else{
                    int jj = LenthList_L(L);
                printf("链表的长度为%d\n",jj);
                }
                printf("\n");
                break;
            case 10:
                if(L==NULL)
                {
                    printf("在执行操作十之前必须执行操作5(建表)\n");
                }else{
                int m,r;
                printf("请输入第i个元素的i:\n");
                scanf("%d",&m);            
                PriorElem_L(L,m,r);
                }
                printf("\n");
                break;
            case 11:
                if(L==NULL)
                {
                    printf("在执行操作十一之前必须执行操作5(建表)\n");
                }else{
                int gg,hh;
                printf("请输入第i个元素的i:\n");
                scanf("%d",&gg);            
                NextElem_L(L,gg);
                } 
                printf("\n");
            break;
            case 12:
                if(L==NULL)
                {
                    printf("在执行操作十二之前必须执行操作5(建表)\n");
                }else{
                    int qq;
                    printf("请输入你想要搜到的数字\n");
                    scanf("%d",&qq);
                    PriorElem_L_X(L,qq);
                }                     
                printf("\n");  
            break;
            case 13:
                if(L==NULL)
                {
                    printf("在执行操作十三之前必须执行操作5(建表)\n");
                }else{
                    int ww;
                    printf("请输入你想要搜到的数字\n");
                    scanf("%d",&ww);
                    NextElem_L_X(L,ww);
                    
                }
                printf("\n");
            break;
            default:

                printf("输入有误\n");
                printf("\n");
            break;
        }
        show();
        printf("\n\n请在此输入功能数字\n");
        scanf("%d",&num);
    }
}

//在带有头结点的单链表L中,删除第i个元素,并由e返回其值
Status ListDelete_L(LinkList L,int i,int *e)
{   
    LinkList p,q;
    int j;
    int eee = LenthList_L(L);
    if(i<eee+1&&i>0)
    {
        p=L->next;j=1;
        while(p->next&&j<i-1)
        {
            p=p->next;++j;
        }
        if(!(p->next)||j>i-1)return ERROR;
        q = p->next;p->next = q->next;
        *e = q->data;
        free(q);
        return OK;
    }else{
        printf("输入位置有错\n\n");
    }
}

//当第i个元素存在时,把第i个元素赋值给e并返回ok
Status GetElem_L(LinkList L,int i,int *e)
{
    LinkList p;
    int j;
    int tt=LenthList_L(L);
    if(i<=tt&&i>0)
    {
    p = L->next;
    j=1;
    while(p&&j<i)
    {
        p=p->next;++j;
    }
    //if(!p||j>i) return ERROR;
    *e = p -> data;
    printf("第%d个元素是%d\n",i,*e);
    return OK;
    }else{
        printf("输入有错\n");
    }
}

//修改第i个元素的值为e
Status Recompose_L(LinkList L,int i,int e,int *q)
{
    LinkList p;
    p=L->next;
    int j=1;
    while(p&&j<i)
    {
        p=p->next;
        ++j;
    }
    if(!p&&j>=i) 
        return ERROR;
    *q=p->data;
    p->data= e;
    return OK;
}

//判断一个单链表是否为空;
void ListEmpty_L(LinkList L)
{
    if(L->next!=NULL)
        printf("这个单链表不是空表\n");
    else
        printf("这个单链表是空表\n");
}

//摧毁单链表
void DestroyList_L(LinkList L)
{
    LinkList p;
    while(L)
    {
        p=L;
        L=L->next;
        free(p);
    }
    printf("单链表已经摧毁\n");
}

//求单链表表长
Status LenthList_L(LinkList L)
{
    LinkList p=L->next;
    int i=1;
    while(p->next!=NULL)
    {
        p=p->next;
        ++i;
    }
    return i;
}

//求第i个元素的直接前驱
Status PriorElem_L(LinkList L,int i,int e)
{
    LinkList p,q;
    int j=1;
    if(i==1){
        printf("这个表没有前驱\n");
    }else{
    p=L->next;
    while(p!=NULL&&j!=i)
    {
        q=p;
        p=p->next;
        j++;
    }
    printf("第%d个元素的直接前驱是%d",i,q->data);
    }
}

//求第i个元素的直接后继
Status NextElem_L(LinkList L,int i)
{
    LinkList p=L->next;
    int j=1;
    while(j!=i&&p!=NULL)
    {
        p=p->next;
        j++;
    }
    if(j>i)
    {
        printf("这个表没有直接后继\n");
    }else{
        p=p->next;
        printf("第%d个元素的直接后继是%d",i,p->data);
    }   
}

//求元素X的直接前驱(求X的前一个元素)
Status PriorElem_L_X(LinkList L,int e)
{
    LinkList p,q;
    p=L->next;
    if(p->data==e)
    {
        printf("没有前驱\n");
    }
    while(p&&p->data!=e)
    {
        q=p;
        p=p->next;
    }
    printf("%d的直接前驱是%d\n",e,q->data);
}

//求元素X的直接后继(求X的后一个元素)
Status NextElem_L_X(LinkList L,int e)
{
    LinkList p=L->next;
    while(p&&p->data!=e)
    {
        p=p->next;
    }
    if(p->next==NULL)
    {
        printf("这个数字没有直接后继\n");
    }
    p=p->next;
    printf("%d的直接后继元素是%d\n",e,p->data);
}

运行样例测试:

如果刚刚开始不建表就不进入:

5.建表

 1.打印

2.插入

打印检查

3.删除元素

打印检查

4.当第i个元素存在时,把第i个元素赋值给e并返回ok;

6.修改第i个元素的值为e

7.判断一个单链表是否为空

9.求表长

10.求第i个元素的直接前驱

 

 11.求第i个元素的直接后继

12. 求元素X的直接前驱(求X的前一个元素)(单链表中数字不重复时使用)

13.求元素X的直接后继(求X的后一个元素)(单链表中数字不重复时使用)

 

 8.摧毁单链表

 

验证:

  • 13
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值