C++實現單鏈表的逆置
阿新 • • 發佈:2019-01-22
#include<iostream> using namespace std; const int N=6; typedef struct node{ //單鏈表 int data; struct node* next; }LinkedNode; /****由陣列建立單鏈表****/ LinkedNode *CreateList(int a[N]) { LinkedNode* ListHead=new LinkedNode(); ListHead->data=a[0]; LinkedNode* q = ListHead; for(int i=1;i<N;i++) { LinkedNode* p=new LinkedNode(); p->data=a[i]; q->next=p; q=p; } return ListHead; } /****輸出單鏈表****/ void PrintList(LinkedNode *ListHead) { if(NULL==ListHead)cout<<"The List is empty!"<<endl; else { LinkedNode* p=ListHead; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl; } } LinkedNode* ReverseList(LinkedNode* ListHead) { cout<<"Begin to Reverse the List"<<endl; if( (NULL==ListHead)||(NULL==ListHead->next) )return ListHead; //邊界檢測 LinkedNode* pPre=ListHead; //先前指標 LinkedNode* pCur=pPre->next; //當前指標 LinkedNode* pNext=NULL; //後繼指標 while(pCur!=NULL) { pNext=pCur->next; pCur->next=pPre; pPre=pCur; pCur=pNext; } ListHead->next=NULL; ListHead=pPre; //記錄下新的頭結點 return ListHead; } /* void ReverseList(LinkedNode* pCur,LinkList& ListHead) { if( (NULL==pCur)||(NULL==pCur->next) ) { ListHead=pCur; } else { LinkedNode* pNext=pCur->next; ReverseList(pNext,ListHead); //遞迴逆置後繼結點 pNext->next=pCur; //將後繼結點指向當前結點。 pCur->next=NULL; } } */ int main() { int a[N]={1,2,3,4,5,6}; LinkedNode* list=CreateList(a); PrintList(list); list = ReverseList(list); PrintList(list); system("pause"); return 0; }