码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-31 18:58:44      阅读:389      评论:0      收藏:0      [点我收藏+]

标签:

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

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

//单链表定义
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为:

技术分享

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

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

标签:

原文地址:http://www.cnblogs.com/dhls231/p/4773555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!