C语言单链表逆置


实现单链表的逆置。

效果图:

多的就不说了。代码如下:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.  
  4. typedef struct node { 
  5.     int data; 
  6.     struct node *next; 
  7. }Node; 
  8.  
  9.  
  10. //创建链表  
  11. Node *CreatList(void
  12.     int val, i, n; 
  13.     Node *phead, *p, *q; 
  14.  
  15.     phead = NULL; 
  16.     printf("请输入您要建立的链表长度:\n"); 
  17.     scanf("%d", &n); 
  18.     printf("请输入您要输入的数据:\n"); 
  19.     for(i=0; i<n; ++i) 
  20.     {     
  21.         scanf("%d", &val); 
  22.         p = (Node *)malloc(sizeof(Node)); 
  23.         p->data = val; 
  24.         if(NULL == phead) 
  25.             q = phead = p; 
  26.         else 
  27.         q->next = p; 
  28.         q = p; 
  29.     } 
  30.     p->next = NULL; 
  31.     return phead; 
  32.  
  33.  
  34. //链表的逆置  
  35. Node *ReverseList(Node *phead) 
  36.     Node *p, *q, *r; 
  37.  
  38.     p = phead; 
  39.     q=r=NULL; 
  40.  
  41.     while(p) 
  42.     { 
  43.         q = p->next; 
  44.         p->next = r; 
  45.         r = p; 
  46.         p = q; 
  47.     } 
  48.     return r; 
  49.  
  50.  
  51. //输出链表  
  52. void ShowList(Node *phead) 
  53.     Node *p; 
  54.    
  55.     p = phead; 
  56.     while(p) 
  57.     { 
  58.         printf("%d ", p->data); 
  59.         p = p->next; 
  60.     } 
  61.     printf("\n"); 
  62.  
  63.  
  64. int main(void
  65.     Node *phead; 
  66.  
  67.     phead = CreatList(); 
  68.     printf("链表逆置前的数据:\n"); 
  69.     ShowList(phead); 
  70.  
  71.     phead = ReverseList(phead); 
  72.  
  73.     printf("链表逆置后的数据:\n"); 
  74.     ShowList(phead); 
  75.      
  76.     return 0; 
  77. }   

相关内容