实现的功能:将单链表头节点以外的节点反转,即头节点-节点1-节点2-节点3....变成头节点-节点3-结点2-结点1.
#include <iostream> #include<cmath> using namespace std; struct LinkNode { int data; LinkNode *next; }; class List { private: LinkNode *head; public: List(); void insert(int data1); void input(); void show(); void reversal(); }; List::List() { head=new LinkNode; } void List::insert(int data1) { LinkNode *p=new LinkNode; p->data=data1; p->next=head->next; head->next=p; } void List::input() { cout<<"请输入数据,输入0代表结束"<<endl; int d; cin>>d; while(d!=0) { insert(d); cin>>d; } } void List::show() { LinkNode *p=head->next; while(p) { cout<<p->data<<endl; p=p->next; } cout<<endl; } void List::reversal() { LinkNode *p1,*pn,*tmp; p1=head->next; pn=p1->next; p1->next=NULL;//断开第一个结点 while(pn) { tmp=pn; pn=pn->next; tmp->next=p1;//第一循环将第二个结点指向第一个结点,下一次循环将指向前一个结点 head->next=tmp; p1=head->next;//头节点的下一个结点始终命名为p1 } } int main() { List li=List(); li.input(); li.show(); li.reversal(); li.show(); return 0; }