PAT 單鏈表逆轉
阿新 • • 發佈:2018-12-08
- #include <stdio.h>
- #include <stdlib.h>
- typedef int ElementType;
- typedef struct Node *PtrToNode;
- struct Node {
- ElementType Data;
- PtrToNode Next;
- };
- typedef PtrToNode List;
- List Read(); /* 細節在此不表 */
- void Print( List L ); /* 細節在此不表 */
-
- List Reverse( List L );
- int main()
- {
- List L1, L2;
- L1 = Read();
- L2 = Reverse(L1);
- Print(L1);
- Print(L2);
- return 0;
- }
- List Read()
- {
- PtrToNode head=NULL;
- PtrToNode list=NULL;
- int len;
- scanf("%d",&len);
- if(len==0)
- return NULL;
- int num;
- scanf("%d",&num);
- head=(PtrToNode)malloc(sizeof(struct Node));
- head->Data=num;
- head->Next=NULL;
- list=head;
- len--;
- while(len)
- {
- PtrToNode node=(PtrToNode)malloc(sizeof(struct Node));
- scanf("%d",&num);
- node->Data=num;
- node->Next=NULL;
- list->Next=node;
- list=node;
- len--;
- }
- return head;
- }
- void Print( List L )
- {
- if(L==NULL)
- return ;
- while(L!=NULL)
- {
- printf("%d ",L->Data);
- L=L->Next;
- }
- putchar('\n');
- }
- List Reverse( List L )
- {
- if(L==NULL)
- return NULL;
- PtrToNode l1=NULL;
- // PtrToNode l3=L;
- PtrToNode l2=NULL;
- while(L!=NULL)
- {
- l1=L->Next;
- L->Next=l2;
- l2=L;
- L=l1;
- }
- return l2;
筆記:typedef struct Node * PtrToNode struct Node * = PtrToNode PtrToNode List 相當於定義了一個 struct Node 型別的指標
1.對List read()解析 先要定義一個結構變數 賦值為NULL; 開闢一個結構空間 。 然後輸入資料長度,判斷是否為0 ,是則返回NULL 不是則繼續輸入資料,然後資料弄到結構裡面去,記得Next為NULL; 那麼要判斷了如果有大於等於一個元素,就要在list裡面繼續新增下去,怎麼做呢? 用迴圈來做啊 while(len) 在 裡面開闢一個 PtrToNode 型別的變數 node 那麼這個變數就帶有 num 和 NULL 每次輸入一個數 在把list 指向node 即可一個連結串列形成了; OK,going on。 在重新寫一個看看 2.對Print函式進行解析 你要輸出 首先要看這個它有沒有空?沒有才可以輸出的。 if(L==NULL) 3.Reverse 函式 首先判斷空不 要寫 if (L==NULL)? 不空在進行下面的步驟。 設定一個臨時儲存的函式和一個儲存逆反連結串列的連結串列。 現在coding
4.寫一個完整的試一試;