1. 程式人生 > >PAT 單鏈表逆轉

PAT 單鏈表逆轉

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. typedef int ElementType;  
  5. typedef struct Node *PtrToNode;  
  6. struct Node {  
  7.     ElementType Data;  
  8.     PtrToNode   Next;  
  9. };  
  10. typedef PtrToNode List;  
  11.   
  12. List Read(); /* 細節在此不表 */  
  13. void Print( List L ); /* 細節在此不表 */  
  14.   
  15. List Reverse( List L );  
  16.   
  17. int main()  
  18. {  
  19.     List L1, L2;  
  20.     L1 = Read();  
  21.     L2 = Reverse(L1);  
  22.     Print(L1);  
  23.     Print(L2);  
  24.     return 0;  
  25. }  
  26. List Read()  
  27. {  
  28.     PtrToNode head=NULL;  
  29.     PtrToNode list=NULL;  
  30.     int len;  
  31.     scanf("%d",&len);  
  32.     if(len==0)  
  33.     return NULL;  
  34.     int num;  
  35.     scanf("%d",&num);  
  36.     head=(PtrToNode)malloc(sizeof(struct Node));  
  37.     head->Data=num;  
  38.     head->Next=NULL;  
  39.     list=head;  
  40.     len--;  
  41.     while(len)  
  42.     {  
  43.      PtrToNode node=(PtrToNode)malloc(sizeof(struct Node));  
  44.         scanf("%d",&num);  
  45.     node->Data=num;  
  46.     node->Next=NULL;  
  47.     list->Next=node;  
  48.     list=node;  
  49.         len--;  
  50.     }  
  51.     return head;      
  52. }  
  53. void Print( List L )  
  54. {  
  55.     if(L==NULL)  
  56.     return ;  
  57.     while(L!=NULL)  
  58.     {  
  59.         printf("%d ",L->Data);  
  60.         L=L->Next;  
  61.     }  
  62.     putchar('\n');  
  63. }  
  64. List Reverse( List L )  
  65. {  
  66.     if(L==NULL)  
  67.     return NULL;  
  68.     PtrToNode l1=NULL;  
  69. //  PtrToNode l3=L;  
  70.     PtrToNode l2=NULL;  
  71.     while(L!=NULL)  
  72.     {  
  73.         l1=L->Next;  
  74.         L->Next=l2;  
  75.         l2=L;  
  76.         L=l1;  
  77.     }  
  78.     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.寫一個完整的試一試;