首页 > 代码库 > C++算法之 反转单链表

C++算法之 反转单链表

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点,链表节点定义为:

struct ListNode

     int    m_nValue;

    ListNode* m_pNext;

};

算法思路:

链表  1-->2-->3-->4-->5

建立一个 pPrev节点,而且为空节点;  pPrev = NULL;再建立一个节点pNode = pHead; 再建立第三个节点pNext = pNode->m_pNext; 

pNext的作用:用来保存pNode后面一个的节点,防止链表在中间断开,然后pPrev与pNode往下遍历:

看代码:

ListNode* ReverseList(ListNode* head){	ListNode* pNode = head;	ListNode* pPrev = NULL;	while (pNode != NULL)	{		ListNode* pNext = pNode->m_pNext;//保存下一个节点的值		pNode->m_pNext = pPrev;//把当前pNode的下一个节点指向pPrev		pPrev = pNode;//此时pPrev向后移动指向此时的pNode		pNode = pNext;//而pNode也向后移动,指向刚才保存的pNext;	}	return pPrev;//	return pReversedHead;}


完整代码:

// ReverseList.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;struct ListNode{	int         m_nValue;	ListNode*   m_pNext;	ListNode()	{	}	ListNode(int i):m_nValue(i),m_pNext(NULL)	{	}};void AddToTail(ListNode* pHead, int value){	ListNode* pNew = new ListNode();	pNew->m_nValue = http://www.mamicode.com/value;>


代码可以运行测试通过!

 

 

 

 

C++算法之 反转单链表