C語言單鏈表逆置的代碼實現 (簡單易懂版)


  嗯,,這是自己寫的第一篇博客哈,寫的不好大家不要見怪,主要是想把自己的一些思想分享給大家。也歡迎大家指出錯誤,一同進步。

 

  話不多說,直接先說想法。要把一個單鏈表逆置,可以大致分為下列幾步。先創建一個鏈表。然后要考慮到鏈表的逆置實現。最后是鏈表的輸出。有了這樣過幾步大概的想法之后,我們便要來一步步的實現啦。嗯,,創建鏈表就不說了,大家都會。  然后呢就是鏈表的逆置,這里我是采用的就地逆置法,,嗯,反正我是這么叫的,大家可以參考一下。當然啦,你得考慮到函數的形參和返回值以及指針的交接,這里如果出了問題,編譯器是不會報錯的,所以大家務必多加注意。其余的小問題還是看代碼吧。

 

  額,,之前畫的草圖不見了,,現在也沒有辦法給大家畫個草圖演示一下,很抱歉啊。如果大家看不懂鏈表逆置可以畫個草圖自己看看,應該就差不多了

  

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 struct student 
 5 {
 6     int data;
 7     struct student *next;
 8 };
 9 
10 int iCount;                                                        //定義全局變量保存代碼長度
11 
12 struct student *Create()
13 {
14     struct student *pHead = NULL;
15     struct student *pNew,*pEnd;
16     iCount = 0;
17     pEnd = pNew = (struct student*)malloc(sizeof(struct student));
18     printf("請輸入數據:");
19     scanf("%d",&pNew->data);
20     while(pNew->data!=0)
21     {
22         iCount++;
23         if(iCount == 1)                                                 //從本條if語句開始就要多注意指針的交接了哦,比較容易錯
24         {
25             pNew->next = NULL;
26             pEnd = pNew;
27             pHead = pNew;
28         }
29         else
30         {
31             pNew->next = NULL;
32             pEnd->next = pNew;
33             pEnd = pNew; 
34         }
35         pNew = (struct student*)malloc(sizeof(struct student));
36         printf("請輸入數據:");
37         scanf("%d",&pNew->data);
38     }
39     free(pNew);
40     return pHead;
41 }
42 
43 struct student *reverse(struct student *pHead)                             //鏈表逆置函數
44 {
45     struct student *p,*q,*t;                                              //p為前置指針,q為后置指針,t為交換指針
46     q = pHead;
47     p = (q->next);
48     q->next = NULL;
49     while(t!=NULL)
50     {
51         t = p->next;
52         p->next = q;
53         q = p;
54         if(t!=NULL) p = t;
55         else;
56     }
57     return (p);
58 }
59 
60 void showlist(struct student *pHead)                                //指針輸出函數
61 {
62     struct student *temp;
63     temp = pHead;
64     
65     while(temp)
66     {
67         printf(" %d ",temp->data);
68         temp = temp->next;
69     }
70     printf("\n");
71 }
72 
73 int main()  
74 {  
75    struct student *first;  
76   
77     first = Create();  
78     printf("鏈表逆置前的數據:"); 
79     showlist(first);  
80   
81     first = reverse(first);  
82   
83     printf("鏈表逆置后的數據:");  
84     showlist(first);  
85       
86     return 0;  
87 } 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM