单链表的反转

来源:互联网 发布:ubuntu 16.04 vi使用 编辑:程序博客网 时间:2024/06/07 01:13

实现的功能:将单链表头节点以外的节点反转,即头节点-节点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;}

0 0
原创粉丝点击