链表反转
文章目录
//反转链表注意别断链
#include <iostream>
using namespace std;
typedef struct ListNode{
int m_nValue;
ListNode* m_pNext;
}ListNode, *List;//必须是一个链表
void Insert(List& pHead,int data){
ListNode* p=new ListNode;
p->m_nValue=data;
p->m_pNext=NULL;
if(pHead==NULL)
pHead=p;
else{
p->m_pNext=pHead;
pHead=p;
}
}
void Print(List& pHead){
if(pHead==NULL)
return ;
ListNode* p=pHead;
while(p){
cout<<p->m_nValue<<" ";
p=p->m_pNext;
}
cout<<endl;
}
ListNode *ReverseList(List &L){
ListNode* pNode=L;
List ReverseHead=NULL;
ListNode* pPre=NULL;//前一个节点
while(pNode!=NULL){
ListNode* pNext=pNode->m_pNext;//保存后一个节点,不至于反转时候丢失
if(pNext==NULL)
ReverseHead=pNode;//就一个节点
pNode->m_pNext=pPre;//实现反转
pPre=pNode;
pNode=pNext;//继续下一对节点的反转
}
return ReverseHead;
}
int main()
{
ListNode *p;
List L=NULL;
Insert(L,5);
Insert(L,2);
Insert(L,3);
Insert(L,4);
Print(L);
p=ReverseList(L);
while(p){
cout<<p->m_nValue<<" ";
p=p->m_pNext;
}
return 0;
}