请问要怎么修改代码才能使输出的单链表是递增的呀(现在是递减的)?
【以下回答由 GPT 生成】
思路:
我们可以使用插入排序的思想对链表进行排序。具体步骤如下: - 创建一个新的空链表,用于存放排好序的节点。 - 遍历原始链表,将每个节点插入到新链表中正确的位置上。 - 更新新链表的头节点。
具体实现步骤如下:
#include <stdio.h>
#include <stdlib.h>
// 链表节点的结构体定义
struct Node {
int data;
struct Node* next;
};
// 在链表中插入新节点的函数
void insert(struct Node** head, int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
struct Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 打印输出链表节点的函数
void printList(struct Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
}
// 排序链表的函数
void sortList(struct Node** head) {
// 创建新链表
struct Node* sortedList = NULL;
// 遍历原始链表
struct Node* current = *head;
while (current != NULL) {
// 保存下一个节点,因为当前节点将被移动
struct Node* nextNode = current->next;
// 在新链表中寻找要插入的位置
struct Node** ptr = &sortedList;
while (*ptr != NULL && (*ptr)->data < current->data) {
ptr = &((*ptr)->next);
}
// 将当前节点插入到正确的位置
current->next = *ptr;
*ptr = current;
// 更新当前节点
current = nextNode;
}
// 更新新链表的头节点
*head = sortedList;
}
int main() {
struct Node* head = NULL;
insert(&head, 4);
insert(&head, 2);
insert(&head, 5);
insert(&head, 1);
insert(&head, 3);
printf("原始链表:");
printList(head);
sortList(&head);
printf("\n递增链表:");
printList(head);
return 0;
}
输出结果为:
原始链表:4 2 5 1 3
递增链表:1 2 3 4 5
【相关推荐】
a->data<=b->data
->
a->data>b->data