单向链表总结

作者: cjs2019 | 来源:发表于2019-03-11 08:20 被阅读11次

    // 2019-03-11

    长期置顶:欢迎大家挑错(友好地)(以及不友好地)……大家请直接在评论区发言(喷),请不要私信我,作业好多…… 还有是请注意公告内容,注意学术诚信,严格遵守我国法律,……(略去10^100字)

    —————————————我是分割线—————————————

    我这写的是啥……

    我的 文件/代码 去哪里了……

    我的作业去哪里……

    能给我个和……聊天的时间吗……太真实了!!

    竟然因为含有meizi这个单词,而不能发布更新,太真实了!!

    a w s l

    —————————————我是分割线—————————————

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define INPUT_STOP_SIGNAL (-1)
    
    struct ListNode{
        long long data;
        ListNode* next=NULL;
    };
    
    void malloc_error_report(void){//malloc错误报告;
        printf("Memory allocation failed!\nPlease check it again to find the reason which may be too much data input!\n");
    }
    
    void other_error_report(void){//其他错误报告;
        printf("There may be an error in the code. Please check it again and try to debug it!\nGood luck to you!\n");
    }
    
    // FIFO 队列 追加方式创建链表————将新加入元素插到链表尾部;
    void create_one_listNode(ListNode** headPtr,ListNode** presentPtr,long long num){//创建一个节点;(对头指针和尾指针采用传引用方式);
        ListNode *ptr=NULL;//声明变量,用于进行新节点的申请;
        if ((*headPtr)==NULL){//如果头指针指向空类型,那么,之前必是空表;
            ptr=(ListNode*)malloc(sizeof(ListNode));//申请,并用临时指针ptr指向;
            if (ptr==NULL){ //如果申请失败,打印错误报告;
                malloc_error_report();
            }
            else{ //否则,即如果申请成功;
                (*headPtr)=ptr; //将该指针指向位置赋值给 头指针;
                (*headPtr)->data=num; //将数据存入 头部节点的数据域中;
                (*presentPtr)=(*headPtr);//现在的List不在是empty List,所以将尾部指针指向最后一个节点(由于只有一个节点,所以也就是头节点);
            }
        }
        else{
            ptr=(ListNode*)malloc(sizeof(ListNode)); //申请,并用临时指针ptr指向;
            if (ptr==NULL){  //如果申请失败,打印错误报告;
                malloc_error_report();
            }
            else{ //否则,即如果申请成功;
                (*presentPtr)->next=ptr; //将下一个节点的实际位置赋给presentPtr的指针域;
                (*presentPtr)=(*presentPtr)->next; //将尾指针指向下一个节点;
                (*presentPtr)->data=num; //将数据存入 最后一个节点的 数据域中;
            }
        }
    }
    
    
    // LIFO 插入方式创建链表————将新加入元素插到链表头部;
    void create_one_listNode_LIFO(ListNode** headPtr,ListNode** lastPtr,long long num){//创建一个节点;(对头指针和尾指针采用传引用方式);
        ListNode *ptr=NULL;//声明变量,用于进行新节点的申请;
        if ((*lastPtr)==NULL){//如果尾部指针指向空类型,那么,之前必是空表;
            ptr=(ListNode*)malloc(sizeof(ListNode));//申请,并用临时指针ptr指向;
            if (ptr==NULL){ //如果申请失败,打印错误报告;
                malloc_error_report();
            }
            else{ //否则,即如果申请成功;
                *lastPtr=ptr;
                (*lastPtr)->data=num;
                (*headPtr)=(*lastPtr);
            }
        }
        else{
            ptr=(ListNode*)malloc(sizeof(ListNode)); //申请,并用临时指针ptr指向;
            if (ptr==NULL){  //如果申请失败,打印错误报告;
                malloc_error_report();
            }
            else{ //否则,即如果申请成功;
                ptr->next=(*headPtr);
                (*headPtr)=ptr;
                (*headPtr)->data=num;
            }
        }
    }
    
    ListNode* input_data(ListNode* headPtr){//处理输入数据,并将其存入一个链表中;
        ListNode* ptr=NULL,*presentPtr=NULL;
        long long num;
        scanf("%lld",&num);//逐个输入数据;
        while (num != INPUT_STOP_SIGNAL){//如果输入数据不为-1,就创建一个新的节点,然后将数据储存进去;
            create_one_listNode_LIFO(&headPtr,&presentPtr,num);//创建一个新的节点,并储存数据;
            scanf("%lld",&num);//读入下一个数据;
        }
        return headPtr;//返回链表的头指针;
    }
    
    void show_one_list(ListNode* headPtr){
        ListNode *ptr=headPtr;
        while(ptr != NULL){
            printf("%lld ",ptr->data);
            ptr=ptr->next;
        }
        printf("\n");
    }
    
    int main(){
        printf("Please input a list(end by -1):");
        ListNode *headPtr=NULL;//相当于创建一个空表(只有头指针,没有尾指针);
        headPtr=input_data(headPtr);//处理输入信息,假设处理的输入信息都是以「标准输入」实现的;
        
        printf("The list you have just inputted is:");
        show_one_list(headPtr); // If you wanna take a look at it…… o(^_^)o ……
    
    
        return 0;
    }

    相关文章

      网友评论

        本文标题:单向链表总结

        本文链接:https://www.haomeiwen.com/subject/mjampqtx.html