单链表的逆置

今天做一道单向链表逆置的题,又被绕晕了,特意百度找了一个

转载自:单链表的逆置--普通循环方法(详细图解)

(反正我看懂了)

单链表的逆置--普通循环方法(详细图解)

诚如很多人所说,吃透这个还是要自己画一个详细的过程图。今天就给大家介绍一下(普通的循环方法)我学习下来的一些经验,如有不对之处还望大家一起交流。

首先,以下是关于单链表逆置的普通循环方法的代码:

 

//单链表定义
typedef struct ListNode{
        int m_nValue;
        ListNode* pNext;
};
 
//单链表逆置实现
ListNode* ReverseList(ListNode* pHead)
{
    if (pHead == NULL || pHead->pNext == NULL)
    {
        retrun pHead;
    }
 
    ListNode* pRev = NULL;
    ListNode* pCur = pHead;
    while(pCur != NULL)
    {
        ListNode* pTemp = pCur;   // 步骤①
        pCur = pCur->pNext;       // 步骤②
        pTemp->pNext = pRev;      // 步骤③
        pRev = pTemp;
    }
    return pRev;
}

下面我们来用图解的方法具体介绍整个代码的实现流程:

初始状态:

第一次循环:

第一次循环过后,步骤①:pTemp指向Head,步骤②:pCur指向P1,步骤③:pTemp->pNext指向NULL。

此时得到的pRev为:

第二次循环:

第二次循环过后,步骤①:pTemp指向P1,步骤②:pCur指向P2,步骤③:pTemp->pNext指向Head。

此时得到的pRev为:

第三次循环:

第三次循环过后:步骤①:pTemp指向P2,步骤②:pCur指向P3,步骤③:pTemp->pNext指向P1。

此时得到的pRev为:

第四次循环:

 

第四次循环过后:步骤①:pTemp指向P3,步骤②:pCur指向NULL,步骤③:pTemp->pNext指向P2。

此时得到的pRev为:

至此,单链表的逆置完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值