#include <iostream>
using namespace std;
struct node {
int value;
node *next;
};
node *add(node *head, int value) {
node *new_node = new node();
new_node -> value = value;
new_node -> next = NULL;
if(head == NULL) {
head = new_node;
} else {
node *p_node = head;
while(p_node -> next != NULL) {
p_node = p_node -> next;
}
p_node -> next = new_node;
}
return head;
}
void print(node *head) {
if (head == NULL) {
cout << "the linked list is empty!";
return ;
} else {
node *p_node = head;
cout << p_node -> value << ' ';
while(p_node -> next != NULL) {
p_node = p_node -> next;
cout << p_node -> value << ' ';
}
cout << endl;
}
}
node *sort_list(node *head, int value_in) {
if (head == NULL) {
cout << "the linked list is empty!";
return head;
} else {
node *Less = NULL, *Eql = NULL, *More = NULL;
node *p_node = head;
Less = p_node -> value < value_in ? p_node : NULL;
Eql = p_node -> value == value_in ? p_node : NULL;
More = p_node -> value > value_in ? p_node : NULL;
node *Less_p = Less;
node *Eql_p = Eql;
node *More_p = More;
node *ps_node = p_node -> next;
while(ps_node != NULL) {
p_node = ps_node;
ps_node = ps_node -> next;
if(Less == NULL && p_node -> value < value_in) {
Less = p_node;
p_node -> next = NULL;
Less_p = Less;
} else if(Less != NULL && p_node -> value < value_in) {
Less_p -> next = p_node;
p_node -> next = NULL;
Less_p = Less_p -> next;
} else if(Eql == NULL && p_node -> value == value_in) {
Eql = p_node;
p_node -> next = NULL;
Eql_p = Eql;
} else if(Eql != NULL && p_node -> value == value_in) {
Eql_p -> next = p_node;
p_node -> next = NULL;
Eql_p = Eql_p -> next;
} else if(More == NULL && p_node -> value > value_in) {
More = p_node;
p_node -> next = NULL;
More_p = More;
} else if(More != NULL && p_node -> value > value_in) {
More_p -> next = p_node;
p_node -> next = NULL;
More_p = More_p -> next;
}
}
if(Eql == NULL && More == NULL)
return Less;
else if(Less == NULL && More == NULL)
return Eql;
else if(Less == NULL && More == NULL)
return More;
if(Less == NULL) {
Eql_p -> next = More;
return Eql;
}
else if(Eql == NULL) {
Less_p -> next = More;
return Less;
}
else if(More == NULL) {
Less_p -> next = Eql_p;
return Less;
}
Less_p -> next = Eql_p;
Eql_p -> next = More;
return Less;
}
}
int main() {
node *head = NULL, *head_re = NULL;
int value, value_in, data_len;
cout <<"please input the length of the data!" << endl;
cin >> data_len;
cout <<"please input the data!" << endl;
for(int i = 0; i < data_len; i++) {
cin >> value;
head = add(head, value);
}
cout << "please set the middle num!" << endl;
cin >> value_in;
head_re = sort_list(head, value_in);
print(head_re);
system("pause");
return 0;
}
C++单向链表中的荷兰国旗问题
最新推荐文章于 2021-01-23 15:13:34 发布