#include<iostream>
using namespace std;
const int N=6;
typedef struct node{ //单链表
int data;
struct node* next;
}LinkedNode;
/****由数组创建单链表****/
LinkedNode *CreateList(int a[N])
{
LinkedNode* ListHead=new LinkedNode();
ListHead->data=a[0];
LinkedNode* q = ListHead;
for(int i=1;i<N;i++)
{
LinkedNode* p=new LinkedNode();
p->data=a[i];
q->next=p;
q=p;
}
return ListHead;
}
/****输出单链表****/
void PrintList(LinkedNode *ListHead)
{
if(NULL==ListHead)cout<<"The List is empty!"<<endl;
else
{
LinkedNode* p=ListHead;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
}
LinkedNode* ReverseList(LinkedNode* ListHead)
{
cout<<"Begin to Reverse the List"<<endl;
if( (NULL==ListHead)||(NULL==ListHead->next) )return ListHead; //边界检测
LinkedNode* pPre=ListHead; //先前指针
LinkedNode* pCur=pPre->next; //当前指针
LinkedNode* pNext=NULL; //后继指针
while(pCur!=NULL)
{
pNext=pCur->next;
pCur->next=pPre;
pPre=pCur;
pCur=pNext;
}
ListHead->next=NULL;
ListHead=pPre; //记录下新的头结点
return ListHead;
}
/*
void ReverseList(LinkedNode* pCur,LinkList& ListHead)
{
if( (NULL==pCur)||(NULL==pCur->next) )
{
ListHead=pCur;
}
else
{
LinkedNode* pNext=pCur->next;
ReverseList(pNext,ListHead); //递归逆置后继结点
pNext->next=pCur; //将后继结点指向当前结点。
pCur->next=NULL;
}
}
*/
int main()
{
int a[N]={1,2,3,4,5,6};
LinkedNode* list=CreateList(a);
PrintList(list);
list = ReverseList(list);
PrintList(list);
system("pause");
return 0;
}
C++实现单链表的逆置
最新推荐文章于 2023-04-13 20:23:42 发布