1 #include <iostream>
2
3 using namespace std;
4
5 struct node
6 {
7 int data;
8 node *next;
9 };
10
11
12 node *list_create(void)
13 {
14 node *head = NULL;
15 node **current = &head;
16
17 cout << "input value until -1" << endl;
18
19 int a = 0;
20 cin >> a;
21 while(a != -1)
22 {
23 *current = new node;
24 (*current)->next = NULL;
25 (*current)->data = a;
26 current = &((*current)->next);
27 cin >> a;
28 }
29
30 return head;
31 }
32
33 void list_print(const node *head)
34 {
35
36 while(head)
37 {
38 cout << "node->next is : " << head->next << " node->data is : " << head->data <<endl;
39 head = head->next;
40 }
41 }
42
43 node *node_delete(node *head, int data)
44 {
45 if(head == NULL)
46 return head;
47
48 node *current = head;
49 node *prev = head;
50
51 if(head->data == data)
52 {
53 head = head->next;
54 current->next = NULL;
55 delete current;
56 return head;
57 }
58
59
60 while(current)
61 {
62 if(current->data == data)
63 break;
64 prev = current;
65 current = current->next;
66 }
67
68 if(current)
69 {
70 prev->next = current->next;
71 current->next = NULL;
72 delete current;
73 }
74
75 return head;
76 }
77
78 void list_delete(node *head)
79 {
80 node *temp;
81 while(head)
82 {
83 temp = head;
84 head = head->next;
85 temp->next = NULL;
86 delete temp;
87 }
88 }
89
90 node* list_insert(node *head, int data)
91 {
92 node *node_new = new node;
93 node_new->data = data;
94 node_new->next = NULL;
95
96 if(head == NULL)
97 {
98 head = node_new;
99 return head;
100 }
101
102 if(head->data >= data)
103 {
104 node_new->next = head;
105 head = node_new;
106 return head;
107 }
108
109 node *prev = head;
110 node *current = head;
111
112 while(current)
113 {
114 if(current->data < data)
115 {
116 prev = current;
117 current = current->next;
118 continue;
119 }
120 break;
121 }
122
123 node_new->next = current;
124 prev->next=node_new;
125 return head;
126 }
127
128 node *list_rev(node *head)
129 {
130 if(NULL == head)
131 return head;
132
133 node *prev = head;
134 node *current = head;
135 node *next = head->next;
136
137
138 while(next != NULL)
139 {
140 current = next;
141 next = current->next;
142 current->next = prev;
143 prev = current;
144 }
145
146 head->next = NULL;
147 head = current;
148 return head;
149 }
150
151 node *create_sort(void)
152 {
153 node * head = NULL;
154 int a = 0;
155 cin >> a;
156 while(a != -1)
157 {
158 head = list_insert(head, a);
159 cin >> a;
160 }
161
162 return head;
163 }
164 int main(void)
165 {
166 node *head;
167 int num;
168 head = list_create();
169 list_print(head);
170
171 cout << "input the delete number" << endl;
172 cin >> num;
173
174 head = node_delete(head, num);
175
176 list_print(head);
177
178 list_delete(head);
179
180 head = create_sort();
181
182 list_print(head);
183
184 head = list_rev(head);
185
186 list_print(head);
187
188 list_delete(head);
189
190 return 0;
191 }
192