建立單鏈表並原地將連結串列逆序
阿新 • • 發佈:2018-11-14
#include<iostream> #include<stdio.h> using namespace std; #define MAXSIZE 5 #define ERROR -1; #define CORRECT 1; typedef struct List{ int data; struct List *next; }List; List *LinkList; int ShowLinkList(List *L) { List *p; if(!L) return ERROR; p=L; cout<<"您建立的連結串列"<<endl; while(p) { cout<<p->data<<" "; p=p->next; } return CORRECT; } void PrintList(List *L) { List *p = L; while(p!=NULL) { cout<<p->data<<endl; p=p->next; } } List *ReverseList(List *L) { if(L==NULL||L->next == NULL) return L; List *t = NULL, *p = L, *q = L->next; while(q!=NULL) { t = q->next; q->next = p; p=q; q=t; } //此時q指向原始連結串列的最後一個元素,也是逆轉後的連結串列的表頭元素*、 L->next = NULL; L = p; PrintList(L); return L; } List *CreateLinkList(int *number,int n) { int j; List *L,*p,*q; if(n<=0) return NULL; q = new List; q->data = number[1]; q->next = NULL; L = q; p=L; for(j=2;j<=MAXSIZE;j++) { q = new List; q->data = number[j]; q->next = NULL; p->next = q; p=q; } return L; } int main() { int number[100],i,num; List *p; cout<<"請輸入MAXSIZE個數字:"<<endl; for(i=1;i<=MAXSIZE;i++) { cin >>number[i]; } LinkList = CreateLinkList(number,MAXSIZE); ShowLinkList(LinkList); cout<<" "<<endl; cout<<"逆序後的連結串列:"<<endl; ReverseList(LinkList); }