将带头结点的链表逆置


编写一个函数,给定一个链表的头指针,只要求遍历一次,将单链表中的元素顺序反转过来

#include <iostream>
using namespace std;

typedef struct node
{
int data;
struct node *next;
}Node;

class List
{
public:
List();
~List();
void CreateList();
void DisplayList() const;
void ReverseList();
private:
Node *head;
};

List::List()
{
//分配头结点 
head=new Node;
head->next=NULL;
head->data=0;
}

List::~List()
{
if(head)
{
Node *pCurrent=head;
while(head)
{
pCurrent=head->next;
head=pCurrent;
delete pCurrent;
}
}
}

void List::CreateList()
{
//创建带头结点的链表 
int num;
cout<<"Enter digital numbers('ctrl+z' to quit):"<<endl;
Node *pCurrent=head;
while(cin>>num)
{
Node *pTemp=new Node;
pTemp->data=num;
pTemp->next=NULL;
pCurrent->next=pTemp;
pCurrent=pTemp;
}
}

void List::DisplayList() const
{
Node *pCurrent=head->next;
while(pCurrent)
{
cout<<pCurrent->data<<"  ";
pCurrent=pCurrent->next;
}
cout<<endl;
}

void  List::ReverseList()  //思想是将指针的方向反向。将头节点指向尾节点 
{
Node *pCurrent,*pNext,*pTemp;
pCurrent=head->next;  //指向第一个节点 
pNext=pCurrent->next;  //第二个节点
if(!pCurrent || !pNext)  //当链表为空或者只含有一个节点 
return;
pCurrent->next=NULL;     //将第一个节点变为为节点 
while(pNext)
{
pTemp=pNext->next;    //保存下一个节点 
pNext->next=pCurrent; //将指针方向 
pCurrent=pNext;       //指向当前的节点 
pNext=pTemp;          //下一个节点 
}
head->next=pCurrent;  //头结点指向最后一个节点 
}

int main()
{
List list;
list.CreateList();
list.DisplayList();
cout<<"Reverse LinkList."<<endl; 
list.ReverseList();
list.DisplayList();
system("pause");
return 0;
}        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值