编写一个函数,给定一个链表的头指针,只要求遍历一次,将单链表中的元素顺序反转过来
#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; } |
将带头结点的链表逆置
最新推荐文章于 2024-04-15 23:01:14 发布