//链表反转
//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 }
View Code

相关文章:

  • 2022-02-02
  • 2022-02-10
  • 2021-07-12
  • 2021-11-25
  • 2021-06-20
  • 2021-11-26
  • 2022-01-05
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-01
  • 2021-10-29
  • 2021-05-12
相关资源
相似解决方案