小工具知识网

当前位置: 首页 > 行业知识 > 链表简单功能的总结

行业知识

链表简单功能的总结

2026-11-16 00:32:57 来源:互联网转载

下面���将通过创建链表,实现链表的增删,打印,对链表进行复习

()

头文件:

#include

()

#include

#include

typedef struct ListNode 

{

    int data;

    struct ListNode* next;

}SLI;

SLI* create(int x);

void ADDFRONT( SLI** head , int x );

void PRINT( SLI* head );

void ADDTAIL( SLI** head ,int x );

void DELETEFRONT( SLI** head );

void DELETETAIL( SLI** head );

SLI* FIND( SLI* head ,int x );

void ADD_SPECIFICFRONT(SLI** head , SLI* pos ,int x );

void ADD_SPECIFICTAIL(SLI** head , SLI* pos ,int x );

void DELETE_SPECIFIC( SLI** head , SLI* pos );

具体实现的函数:

#include "SList.h"

SLI* create(int x)

{

    SLI* pf = (SLI*)malloc(sizeof(SLI));

    if( pf == NULL )

    {

        perror("fail");

        exit(1);

    }

    pf->data = x;

    pf->next = NULL;

    return pf;

}

void ADDFRONT( SLI** head , int x )

{

    SLI* pf = create(x);

    if( (*head) == NULL )

        *head = pf;

    else

    {

    pf->next = *head;

    *head = pf;

    }

}

void PRINT( SLI* head )

{

    while( head )

    {

        printf("%d->",head->data);

        head = head->next ;

    }

    printf("NULL\n");

}

SLI* FINDTAIL(SLI** head)

{

    SLI* pf = *head;

    while( pf->next != NULL )

    {

        pf = pf->next;

    }

    return pf;

}

void ADDTAIL( SLI** head ,int x )

{

    SLI* pf = create(x);

    SLI* tail = NULL;

    

    assert(head);

    if( *head == NULL )

    {

        *head = pf;

    }

    else

    {

    tail = FINDTAIL(head);

    tail->next = pf;

    }

}

void DELETEFRONT( SLI** head )

{

    SLI* pf = (*head)->next;

    assert(head);

    assert(*head);

    free(*head);

    *head = pf;

}

void DELETETAIL( SLI** head )

{

    SLI* pf = *head;

    assert(head);

    assert(*head);

    if( (*head)->next == NULL )

    {

        return;

    }

    else

    {

        while( pf->next->next != NULL )

        {

            pf = pf->next ;

        }

        pf->next = NULL;

        return;

    }

}

void ADD_SPECIFICFRONT(SLI** head , SLI* pos ,int x )

{

    SLI* a = *head;

    SLI* pf = create(x);

    assert(head);

    assert(*head);

    assert(pos);

    if( pos == *head )//相当与头插

    {

        ADDFRONT( head , x );

        return;

    }

    while( (*head)->next != pos )

    {

        *head = (*head)->next ;

    }

    pf->next = (*head)->next ;

    (*head)->next = pf;

    *head = a;

}

SLI* FIND( SLI* head ,int x )

{

    while( head )

    {

        if(head->data == x)

            return head;

        head = head->next ;

    }

    return NULL;

}

void ADD_SPECIFICTAIL(SLI** head , SLI* pos ,int x )

{

    SLI* pf = create(x);

    if( pos->next == NULL )

    {

        pos->next = pf;

        return;

    }

    else

    {

        pf->next = pos->next ;

        pos->next = pf;

        return;

    }

}

void DELETE_SPECIFIC( SLI** head , SLI* pos  )

{

    SLI* pf = *head;

    if( *head == pos )//当pos为首节点

    {

        *head = (*head)->next ;

        free(pf);

        pf = NULL;

        return;

    }

    while( pf->next != pos )

    {

        pf = pf->next;

    }

    pf->next = pf->next->next ;

}

测试函数:这里可以随意实现

#include "SList.h"

int main()

{

    SLI* pf;

    SLI* head = NULL;

    //ADDFRONT( &head , 1 );

    //ADDFRONT( &head , 2 );

    //ADDFRONT( &head , 3 );

    ADDTAIL( &head ,1);

    ADDTAIL( &head ,2);

    ADDTAIL( &head ,3);

    pf = FIND( head ,1 );

    DELETE_SPECIFIC(&head,pf);

    //ADD_SPECIFICTAIL(&head , pf ,2 );

    PRINT(  head );

    /*PRINT(  head );

    DELETETAIL( &head );

    DELETEFRONT( &head );

    PRINT(  head );*/

}

上一篇:网易电脑版怎么加入服务器?

下一篇:轻松下载PS图片秘籍,超简洁教程!