資料結構之連結串列解析
- 單向連結串列逆序迴圈完整實現(c++語言)
- 單向連結串列逆序遞迴完整實現(c++語言)
程式碼實現如下(迴圈): #include #include using namespace std;
struct linkNode { int val; linkNode *next; linkNode(int x):val(x),next(NULL) { } }; linkNode *reverse2(linkNode *head) { if(head==NULL) return NULL; linkNode *pre=NULL; linkNode *p=head; linkNode *h=NULL; while§ { h=p; linkNode *tmp=p->next;臨時節點指向頭結點的下一節點 p->next=pre; pre=p; p=tmp; } return h; //返回頭結點 } int main() //測試程式碼 { linkNode *head=new linkNode(1); linkNode *p1=new linkNode(2); linkNode *p2=new linkNode(3); head->next=p1; p1->next=p2; //建立連結串列 linkNode *p=reverse2(head); while§ { cout<val<<endl; p=p->next; } //輸出逆序 system(“pause”); return 0; }
程式碼實現如下(遞迴): #include #include using namespace std; struct linkNode { int val; linkNode *next; linkNode(int x):val(x),next(NULL) { } };
linkNode *reverse(linkNode *head,linkNode * &newhead) //head為原連結串列的頭結點,newhead為新連結串列的頭結點 { if(headNULL) return NULL; if(head->nextNULL) { newhead=head; } else { reverse(head->next,newhead); head->next->next=head; head->next=NULL; } return newhead; } int main() //測試程式碼 { linkNode *head=new linkNode(1); linkNode *p1=new linkNode(2); linkNode *p2=new linkNode(3); head->next=p1; p1->next=p2; //建立連結串列 linkNode *newhead=NULL; linkNode *p=reverse(head,newhead); while§ { cout<val<<endl; p=p->next; } //輸出連結串列 system(“pause”); return 0; }
總結:程式碼核心為逆序的過程,需仔細理清思路。