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

(转自:http://www.cnblogs.com/dhls231/p/4773555.html)

关于单链表的逆置,大家都很清楚有两种基本方法:(1)普通的循环的方法。(2)递归调用方法。今天正好研究这两种方法,发现很不理解代码这么写的具体的作用,诚如很多人所说,吃透这个还是要自己画一个详细的过程图。今天就给大家介绍一下(普通的循环方法)我学习下来的一些经验,如有不对之处还望大家一起交流。

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

//单链表定义

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为:

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部