資料結構——3 單鏈表逆向
阿新 • • 發佈:2019-01-31
單鏈表——逆向
單鏈表的逆轉#include<iostream> using namespace std; struct node //node結構體,裡面有一個node指標,用來指向下一個node物件 { int x; node *next; //指向什麼型別的物件,就用什麼型別的指標 }; node* create(int n) //建立連結串列,引數n表示結點的個數,返回型別是結點指標node* { node *head=new node; //建立頭結點 node *p=head; //建立用於往後指的node指標 for(int i=0;i<n;i++) { node *temp=new node; //new一個node指標 temp->x=rand()%100; p->next=temp; //將p的next指向建立的temp,把新節點連線到連結串列後面 p=temp; //將p指向新結點temp,即p移動到下一個節點 } p->next=NULL; //建立完成後,p->next指向NULL return head; } void display(node *head) //輸出連結串列 { node *p; p=head->next; //p重新指向頭結點後的那個結點,即for迴圈建立的第一個結點 if(p==NULL) cout<<"NULL List"; while(p!=NULL) //輸出 { cout<<p->x<<" "; p=p->next; } cout<<endl; } node* reverse(node *head) { node *p,*s,*r; //定義node指標變數 p=head->next; //p指向第一個結點 s=p->next; //s指向第二個結點 p->next=NULL; //第一個結點指標為NULL while(s!=NULL) { r=s->next; //r指向s的下一個結點 s->next=p; //s反向連線p p=s; //p指向原連結串列的下一個結點 s=r; //s指向原連結串列的下一個結點 } head->next=p; //重新指向頭結點,頭結點後第一個結點指向p return head; } int main() { node *list; list=create(10); //建立連結串列 display(list); //輸出顯示建立的連結串列 node* rev=reverse(list); //逆向連結串列後,返回頭結點 display(rev); return 0; }