链表逆序
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 typedef struct NODE 5 { 6 int data; 7 struct NODE *next; 8 }Node; 9 10 Node* reverse(Node *head) 11 { 12 Node *p1, *p2, *p3; 13 14 if(head == NULL || head->next == NULL) 15 { 16 return head; 17 } 18 19 p1 = head; 20 p2 = p1->next; 21 22 23 while(p2) 24 { 25 p3 = p2->next; 26 p2->next = p1; 27 p1 = p2; 28 p2 = p3; 29 } 30 31 head->next = NULL; 32 head = p1; 33 34 return head; 35 } 36 37 Node* create() 38 { 39 Node *p, *head, *s; 40 int num; 41 int i, x; 42 43 printf("please input the node number:"); 44 45 scanf("%d", &num); 46 if(num <= 0) 47 { 48 printf("error! The input number is wrong!!!\n"); 49 return NULL; 50 } 51 52 head = (Node*)malloc(sizeof(Node)); 53 p = head; 54 55 for(i = 0; i < num; i++) 56 { 57 scanf("%d", &x); 58 s = (Node*)malloc(sizeof(Node)); 59 s->data = x; 60 p->next = s; 61 p = s; 62 63 } 64 65 head = head->next; 66 p->next = NULL; 67 68 return head; 69 70 } 71 72 void main() 73 { 74 Node *head, *p; 75 head = create(); 76 p = reverse(head); 77 78 while(p) 79 { 80 printf("%d ", p->data); 81 p = p ->next; 82 } 83 84 printf("\n"); 85 86 } 87 88