本文主要是介绍将带头结点的链表逆置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
编写一个函数,给定一个链表的头指针,只要求遍历一次,将单链表中的元素顺序反转过来 #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; } |
这篇关于将带头结点的链表逆置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!