C语言--对链表进行插入排序

本文介绍了如何使用C语言对链表进行插入排序,包括两种不同的示例操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对链表进行插入排序

示例1:

输入: 4->2->1->3
输出: 1->2->3->4

示例2:

输入: -1->5->3->4->0
输出: -1->0->3->4->5
struct ListNode* insertionSortList(struct ListNode* head){
   
       
struct ListNode* prev, *cur, *start, *newH;
对双向链表进行插入排序的过程涉及遍历链表、查找合适的位置并将新元素插入。以下是一个简单的C语言代码示例,它假设我们有一个结构体`Node`表示链表节点,包含`data`和`prev`和`next`指针: ```c #include <stdio.h> typedef struct Node { int data; struct Node* prev; struct Node* next; } Node; // 插入函数 void insert(Node** head, int value) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = value; newNode->prev = NULL; newNode->next = *head; if (*head != NULL) { (*head)->prev = newNode; } if ((*head)->next != NULL) { (*head)->next->prev = newNode; } else { newNode->next = NULL; // 如果链表只有一个元素 } *head = newNode; } // 插入排序主函数 void insertionSortList(Node** head) { if (*head == NULL || (*head)->next == NULL) { return; // 空链表或单链表无需排序 } Node* current = *head; Node* sortedHead = *head; while (current->next != NULL) { Node* nextTemp = current->next; // 插入当前节点到已排序部分 while (sortedHead->next && sortedHead->next->data < nextTemp->data) { sortedHead = sortedHead->next; } // 将nextTemp移动到适当位置并更新指针 nextTemp->prev->next = nextTemp->next; if (nextTemp->next) { nextTemp->next->prev = nextTemp->prev; } else { *head = nextTemp->prev; // 如果nextTemp是最后一个节点 } nextTemp->prev = sortedHead; nextTemp->next = sortedHead->next; sortedHead->next = nextTemp; } } int main() { // 初始化和操作链表代码... Node* head = ...; insertionSortList(&head); // 更多链表操作... return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值