建立单向链表整数从大到小排序c++
时间: 2023-08-03 16:28:19 浏览: 105
可以按照以下步骤实现单向链表整数从大到小排序:
1. 定义链表节点结构体,包括数据域和指针域。
```
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
```
2. 创建链表并插入节点。
```
ListNode* head = new ListNode(0); // 创建头结点
ListNode* p = head;
int nums[] = {3, 1, 5, 2, 4}; // 待插入的整数数组
int len = sizeof(nums) / sizeof(nums[0]);
for (int i = 0; i < len; i++) {
ListNode* node = new ListNode(nums[i]);
p->next = node;
p = node;
}
```
3. 实现链表排序函数,采用冒泡排序的思想,从头到尾遍历链表,如果相邻两个节点的值大小关系不对,则交换它们的值。
```
void sortList(ListNode* head) {
if (head == NULL || head->next == NULL) {
return;
}
bool flag = true;
while (flag) {
flag = false;
ListNode* p = head->next;
while (p->next != NULL) {
if (p->val < p->next->val) {
int temp = p->val;
p->val = p->next->val;
p->next->val = temp;
flag = true;
}
p = p->next;
}
}
}
```
4. 调用链表排序函数并输出结果。
```
sortList(head);
ListNode* p = head->next;
while (p != NULL) {
cout << p->val << " ";
p = p->next;
}
```
完整代码如下:
```
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
void sortList(ListNode* head) {
if (head == NULL || head->next == NULL) {
return;
}
bool flag = true;
while (flag) {
flag = false;
ListNode* p = head->next;
while (p->next != NULL) {
if (p->val < p->next->val) {
int temp = p->val;
p->val = p->next->val;
p->next->val = temp;
flag = true;
}
p = p->next;
}
}
}
int main() {
ListNode* head = new ListNode(0); // 创建头结点
ListNode* p = head;
int nums[] = {3, 1, 5, 2, 4}; // 待插入的整数数组
int len = sizeof(nums) / sizeof(nums[0]);
for (int i = 0; i < len; i++) {
ListNode* node = new ListNode(nums[i]);
p->next = node;
p = node;
}
sortList(head);
p = head->next;
while (p != NULL) {
cout << p->val << " ";
p = p->next;
}
return 0;
}
```
阅读全文