《資料結構》單鏈表反轉
阿新 • • 發佈:2019-02-01
#include<stdio.h> #include<iostream> using namespace std; #define MAX 100 typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; int InitList(LinkList &L){ L=new LNode; L->next=NULL; return 1; } void TraveList(LinkList L){ struct LNode *p; p=L->next; printf("遍歷連結串列:\n"); while(p){ printf("%d ",p->data); p=p->next; } printf("\n"); } //前插法建立單鏈表 void CreateList(LinkList &L,int n){ L=new LNode; L->next=NULL; for(int i=n;i>0;--i){ printf("請輸入第%d個元素的值:",i); struct LNode *p; p=new LNode; scanf("%d",&p->data); p->next=L->next; L->next=p; } } /* 思想: 先將連結串列的頭結點指標域置空,p指向連結串列的第一個結點; q指向*p的後繼,然後將*p插入到頭結點的後面。 */ void TurnList(LinkList &L){ struct LNode *p; p=L->next; L->next=NULL; while(p){ struct LNode *q; q=p->next;//q指向*p的後繼 p->next=L->next; L->next=p;//將*p插入到頭結點之後 p=q; } } int main(){ LinkList L; if(InitList(L)){ printf("連結串列初始化成功!\n"); }else{ printf("連結串列初始化失敗!\n"); } printf("請輸入連結串列的長度:\n"); int n; scanf("%d",&n); CreateList(L,n); TraveList(L); printf("反轉後的連結串列:\n"); TurnList(L); TraveList(L); }