C++笔试题(单向链表)

来源:互联网 发布:上瘾网络剧拍摄花絮5 编辑:程序博客网 时间:2024/06/06 00:55
#ifndef F_Test_2017_11_11_11_JHASKDFJHASF_H_#define F_Test_2017_11_11_11_JHASKDFJHASF_H_#include <stdio.h>/*单向链表操作*/template<class T>struct FSingletonNode{    T tValue;    FSingletonNode *pFNodeNext;};//清空节点所有数据template<class T>void ClearList(FSingletonNode<T> **pHead){    FSingletonNode<T> *pCurNode = *pHead;    while(*pHead)    {        pCurNode= (*pHead)->pFNodeNext;        delete *pHead;        *pHead = pCurNode;    }    pHead = NULL;}//打印数据template<class T>void PrintLite(FSingletonNode<T> *pHead){    const char *tType= typeid(T).name();    FSingletonNode<T> *pCurNode = pHead;    while (pCurNode)    {        if (0 == strcmp(tType, "int"))        {            TRACE("%d, ", pCurNode->tValue);        }        else if (0 == strcmp(tType, "float"))        {            TRACE("%f, ", pCurNode->tValue);        }        pCurNode = pCurNode->pFNodeNext;    }    TRACE("\n");}//在节点末尾,添加数据template<class T>BOOL Pushback(FSingletonNode<T> **pHead, const T tValue){    //创建新节点,存数据    FSingletonNode<T> *pCurNode = new FSingletonNode<T>;    pCurNode->tValue     = tValue;    pCurNode->pFNodeNext = NULL;    //如果为链表第一个数据,头结点    if (*pHead == NULL)    {        *pHead = pCurNode;    }    else    {        //找到尾节点        FSingletonNode<T> *pEndNode = *pHead;        while(pEndNode->pFNodeNext)        {            pEndNode = pEndNode->pFNodeNext;        }        //将新创建节点设为尾节点        pEndNode->pFNodeNext = pCurNode;    }    return TRUE;}//根据数据,删除节点template<class T>BOOL RemoveNode(FSingletonNode<T> **pHead, const T tValue){    if((*pHead == NULL) || (pHead == NULL))    {        return TRUE;    }    FSingletonNode<T> *pDeleteNode = NULL;    //如果需要删除的是第一个节点    if((*pHead)->tValue == tValue)    {        pDeleteNode = *pHead;        *pHead = (*pHead)->pFNodeNext;      }    else    {        //找到需要删除节点的上一个节点        FSingletonNode<T> *pPreNode = *pHead;        while(pPreNode->pFNodeNext && (pPreNode->pFNodeNext->tValue != tValue))        {            pPreNode = pPreNode->pFNodeNext;        }        //将删除节点的上一个节点的pNext,指向删除节点的下一个节点        if(pPreNode->pFNodeNext && (pPreNode->pFNodeNext->tValue == tValue))        {            pDeleteNode = pPreNode->pFNodeNext;            pPreNode->pFNodeNext = pPreNode->pFNodeNext->pFNodeNext;        }           }    //释放需要删除的节点数据    if (pDeleteNode)    {        delete pDeleteNode;        pDeleteNode = NULL;    }    return TRUE;}//测试void F_Test_List(){    FSingletonNode<int> *pHead = NULL;    Pushback(&pHead, 10);    Pushback(&pHead, 8);    Pushback(&pHead, 20);    Pushback(&pHead, 5);    Pushback(&pHead, 26);    Pushback(&pHead, 9);    Pushback(&pHead, 4);    Pushback(&pHead, 2);    PrintLite(pHead);    RemoveNode(&pHead, 10);    RemoveNode(&pHead, 26);    RemoveNode(&pHead, 2);    RemoveNode(&pHead, 22);    PrintLite(pHead);    ClearList(&pHead);    FSingletonNode<float> *pHeadF = NULL;    Pushback(&pHeadF, (float)1.5);    Pushback(&pHeadF, (float)8.658);    Pushback(&pHeadF, (float)2.265);    Pushback(&pHeadF, (float)22.456);    PrintLite(pHeadF);    ClearList(&pHeadF);}#endif//F_Test_2017_11_11_11_JHASKDFJHASF_H_
原创粉丝点击