//链表反转
//1.将2-n节点依次放到1节点后面,1再放到链表尾
//2.将2-n节点依次放到首节点前面
//3.直接变链表指向 这里采用3
1 //链表反转 2 //1.将2-n节点依次放到1节点后面,1再放到链表尾 3 //2.将2-n节点依次放到首节点前面 4 //3.直接变链表指向 这里采用3 5 #include<stdio.h> 6 #include<string.h> 7 #include<algorithm> 8 using namespace std; 9 10 struct node{ 11 int value; 12 struct node *next; 13 }; 14 15 node* CreateNewNode(int value) 16 { 17 node *p = new node(); 18 p->value = value; 19 p->next = NULL; 20 return p; 21 } 22 23 void AddNewNode(node *p, int value) 24 { 25 node *q = new node(); 26 q->value = value; 27 q->next = NULL; 28 while (p->next != NULL) 29 p = p->next; 30 p->next = q; 31 } 32 33 node* ReverseNode(node *head) 34 { 35 node *p1, *p2, *p3; 36 if (head == NULL || head->next == NULL) 37 return head; 38 p1 = head; 39 p2 = p1->next; 40 while (p2) 41 { 42 p3 = p2->next; 43 p2->next = p1; 44 p1 = p2; 45 p2 = p3; 46 } 47 head->next = NULL; //head is tail 48 return p1; 49 } 50 51 void PrintNode(node *head) 52 { 53 if (head == NULL || head->next == NULL) 54 return; 55 printf("%d",head->value); 56 node *p; 57 while (head->next != NULL) 58 { 59 p = head->next; 60 printf("->%d", p->value); 61 head = p; 62 } 63 } 64 65 int main() 66 { 67 int n, value; 68 scanf("%d", &n); 69 scanf("%d", &value); 70 node *p = CreateNewNode(value); 71 for (int i = 2; i <= n; i ++) 72 { 73 scanf("%d", &value); 74 AddNewNode(p, value); 75 } 76 77 node *q = ReverseNode(p); 78 PrintNode(q); 79 }