链表反转,只用两次头插法就实现了 hello

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 typedef struct Node{
  5     int data;
  6     struct Node *next;
  7 }Link;
  8 
  9 void add(Link * Head);
 10 void print(Link * Head);
 11 Link* reverse(Link * Head);
 12 
 13 int main()
 14 {
 15     Link *Head = (Link *)malloc(sizeof(Link));
 16     Head->next = NULL;
 17     printf("请输入节点的值,输入-1表示结束\n");
 18     add(Head) ;
 19     print(Head);
 20     Head=reverse(Head);
 21 
 22     print(Head);
 23 
 24         getchar();
 25     return 0;
 26 }
 27 void add(Link * Head)
 28 {
 29     int data;
 30     while(~scanf("%d", &data))
 31     {
 32         if(data == -1) break;
 33         Link *L =  (Link *)malloc(sizeof(Link));
 34         L->data = data;
 35         if(Head->next == NULL)
 36         {
 37             L->next = NULL;
 38             Head->next = L;
 39         }
 40         else
 41         {
 42             L->next = Head->next;
 43             Head->next = L;
 44         }
 45 
 46     }
 47 }
 48 
 49 void print(Link *Head)
 50 {
 51     Link *p =  (Link *)malloc(sizeof(Link));
 52     p = Head;
 53     while(p->next != NULL)
 54     {
 55 
 56         printf("%d, ", p->next->data);
 57         p = p->next;
 58     }
 59     p = NULL;
 60     free(p);
 61     printf("\n");
 62 }
 63 
 64 Link* reverse(Link * Head)
 65 {
 66     Link * NewHead = (Link *)malloc(sizeof(Link));
 67     NewHead->next = NULL;
 68     Link *p =  (Link *)malloc(sizeof(Link));
 69     p = Head;
 70     while(p->next != NULL)
 71     {
 72         Link *L =  (Link *)malloc(sizeof(Link));
 73         L->data = p->next->data;
 74         if(NewHead->next == NULL)
 75         {
 76             L->next = NULL;
 77             NewHead->next = L;
 78         }
 79         else
 80         {
 81             L->next = NewHead->next;
 82             NewHead->next = L;
 83         }
 84 
 85         p = p->next;
 86     }
 87         p = Head->next;
 88         Link *p1 =  (Link *)malloc(sizeof(Link));
 89         p1 = Head->next;
 90         while(p1->next != NULL)
 91         {
 92             p1 = p1->next;
 93             free(p);
 94             p = p1 ;
 95         }
 96         Head = NewHead;
 97         NewHead = NULL;
 98         free(NewHead);
 99         free(p1);
100         p1 = NULL;
101         p = NULL;
102 
103         return Head;
104 }
原文地址:https://www.cnblogs.com/fightever/p/4070038.html