单链表插入排序
来源:互联网 发布:熊猫tv小葫芦数据 编辑:程序博客网 时间:2024/06/15 16:52
使用插入排序对单链表从小到大排序。
基本思想:对原链表中每个节点取出来放在新链表中排序插入。
- 带头接单的方法:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *insertionSortList(ListNode *head) { //空链表或长度为1的链表不用排序 if(head == NULL || head->next == NULL) return head; //建立一个头结点方便插入 ListNode * newhead = new ListNode(0); ListNode *p = head; while(p != NULL){ ListNode *ps = newhead; //备份p节点的下一个节点 ListNode *p_bak = p->next; while(ps->next != NULL && ps->next->val < p->val){ ps = ps->next; } p->next = ps->next; ps->next = p; p = p_bak; } return newhead->next; }};
2. 不带头结点:
ListNode *insertionSortList(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode *p = head->next; head->next = NULL; while(p != NULL){ ListNode *p_bak = p->next, *ps = head, *psre = NULL; while(ps != NULL && ps->val < p->val){ //为了能够插入,记录比较节点的前驱 psre = ps; ps = ps->next; } p->next = ps; //当插入节点值比第一个节点小的时候,前驱为NULL,重新设置head if (psre == NULL) head = p; else{ psre->next = p; } p = p_bak; } return head; }
阅读全文
0 0
- 排序之单链表插入排序
- 单链表插入排序
- 单链表实现插入排序
- 插入排序(单链表)
- 单链表插入排序
- 单链表插入排序
- 实现单链表插入排序
- 单链表的插入排序
- 单链表直接插入排序
- 单链表插入排序算法
- [leetcode]单链表插入排序
- 单链表的插入排序
- 单链表实现插入排序
- 单链表---直接插入排序
- 单链表插入排序
- 单链表实现插入排序
- 单链表插入删除排序
- 单链表的插入排序
- Android中Intent/Bundle的通信原理及大小限制(Parcelable原理及与Serializable的区别)
- wxWidgets学习
- pip命令使用简介
- redis源码分析(七)、redis命令学习总结—Redis 有序集合(sorted set)
- php 数组去重
- 单链表插入排序
- Codeforeces
- 突破内存的桎梏——移动端纹理压缩应用与分析
- 关于在linux上你必须要学的常用命令
- xml序列化反序列化辅助类
- redis源码分析(八)、redis数据结构之压缩ziplist--------ziplist.c ziplist.h学习笔记
- ie6,7,8兼容background-size方法
- spring session +cluster redis(spring-session-data-redis)
- wampsever配置虚拟主机