• 链表简单功能的总结


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

    头文件:

    #include <stdio.h>
    #include <stdlib.h>
    #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 );*/
    }

  • 相关阅读:
    完工尚需绩效指数(TCPI)
    算法题练习——NC15 求二叉树的层序遍历、NC88 寻找第K大
    零基础如何入门Web性能测试?
    网络请求流程简述
    MD5碰撞
    【SEC 学习】注册表添加启动脚本
    Kafka - 异步/同步发送API
    软件工程和计算机科学与技术学习方向区别
    《HCIP-openEuler实验指导手册》1.1Apache安装与测试
    Flannel host-gw 和 vxlan
  • 原文地址:https://blog.csdn.net/wx20041102/article/details/136472159