b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C语言实现单链表的逆置

电脑杂谈  发布时间:2019-06-09 08:23:51  来源:网络整理

单链表的逆置_单链表的逆置_链表

原C语言实现链表的逆置

h___q阅读数:9692018-04-19

欢迎大家到我博吃素的狗狗:吽吽 欢迎转载,请注明原创出再嫁作者:catia更新:第九十二章二十七岁的年纪,怎样都不算年轻了经历了七年之痒,被曾经山盟海誓的夫君以七年无所出的名义休弃,她心碎欲绝本以为就这样了此残生,却没发现,有两道目光,已追随了她经年之久咳咳,尝试一下种田文~也~俺突然发现单链表的逆置,不论俺的女主17岁还是27岁,稀罕的都是华丽丽20岁沉稳正太君~小正太,俺稀罕小正太~~~欢迎进入我的专栏,收藏作者,以便圈养我的文文,欢迎点击穿越~(按发表顺序排列)喜欢的同学,就请点击标题下的【收藏此文章】吧,一有更新就看得到了哦拒绝转载,请尊重作者权益朋友的轻松向女尊文单链表的逆置,欢迎捧场...查看详情>>。

单链表的逆置有多种方法可以实现,但根据时间复杂度来讲,最简单的方法有两种:

单链表的逆置_单链表的逆置_链表

typedef int DataType;//类型名重命名
typedef struct Node
{
    struct Node* _pNext;
    DataType _data;
}Node,*PNode;//定义一个单链表
PNode SListRever_ThreePoint(PNode pHead)
{
    PNode pFirst = pHead;
    PNode pMid = pHead->_pNext;
    PNode pLast = pHead->_pNext->_pNext;//设置三个指针分别指向单链表的前三个节点
    if (NULL == pHead)
        return NULL;
    pMid->_pNext = pFirst;//让中间的节点指向前面的节点
    pFirst->_pNext = NULL;//将第一个节点的_next指针置空
    pFirst = pMid;
    pMid = pLast;
    pLast = pLast->_pNext;//让三个指针分别向后前进一个节点
    while (pLast)
    {
        pMid->_pNext = pFirst;
        pFirst = pMid;
        pMid = pLast;
        pLast = pLast->_pNext;
    }//当末尾的指针没有到NULL时,一直让中间的指针指向前面的指针
    pMid->_pNext = pFirst;//跳出循环的时候,只剩下Mid指针没有指向First指针
    return pMid;
}

画图理解:

这里写图片描述

这里写图片描述

链表_单链表的逆置_单链表的逆置

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

单链表的逆置_单链表的逆置_链表

在链表首个节点前插入它后面的节点。

typedef int DataType;//类型名重命名
typedef struct Node
{
    struct Node* _pNext;
    DataType _data;
}Node,*PNode;//定义一个单链表
void SlistRever_PushFront(PNode pHead)
{
    PNode pfirst = pHead;
    PNode pdel = NULL;
    PNode pCur = pHead->_pNext;
    while (pCur != NULL)
    {
        SListNodeInsertFront(pfirst, pCur->_data);//在第一个节点的前面插入一个节点
        pdel = pCur;
        pCur = pCur->_pNext;
        SListErase(pHead, pdel);//删除被插入的节点
        pfirst = pHead;     
    }
}
void SListNodeInsertFront(PNode pos,DataType data)
{
    PNode NewNode = NULL;
    if (NULL == pos)
    {
        printf("插入地址无效\n");
        return 0;
    }
    else
    {
        NewNode = (PNode)malloc(sizeof(Node));
        NewNode->_pNext = pos->_pNext;
        pos->_pNext = NewNode;
        NewNode->_data = pos->_data;
        pos->_data = data;
    }
}
void SListErase(PNode pHead, PNode pos)
{
    PNode pdel = pHead;
    PNode pback = pHead;
    //assert(pHead);
    if (NULL == pHead)
    {
        printf("链表为空\n");
    }
    else
    {
        while (pdel != pos)
        {
            pdel = pdel->_pNext;
            if (pdel != pos)
                pback = pback->_pNext;
        }
        pback->_pNext = pdel->_pNext;
        free(pdel);
        pdel = NULL;
    }
}

画图理解:

这里写图片描述

单链表的逆置_单链表的逆置_链表

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-104745-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...