147. Insertion Sort List
来源:互联网 发布:水晶排课软件 编辑:程序博客网 时间:2024/05/16 23:59
147. Insertion Sort List
Sort a linked list using insertion sort.
题意:插入排序的链表实现。
思路:定义两个链表指针start和end,start指向已经排好序的链表的指针头,end指向已经排好序的指针的结尾。例如对于:
eg: 1->2->4->5以排好序)->3->......;这里start指向1,end指向5。然后定义一个指针cur,指向将要遍历的节点。
对于插入排序分3中情况,
1. 如果cur->val在start与end之间,则从开头遍历,直至找到p->val>cur->val,将其插入p的前面。
2. 如果cur->val比start都要小,则要将其作为新的开头节点。
3. 如果cur->val大于end,则直接end=end->next,即可。
/** * 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) { ListNode* start=new ListNode(0),*end,*cur; start->next=end=head; if(!head||!head->next) return head; cur=head->next; while(cur) { ListNode* nxt=cur->next;//cur接下来会变位置,要事先记着next ListNode* p=start->next; ListNode* tmp=NULL; while(p!=cur&&p->val<cur->val)//找到要插入的位置 {tmp=p;p=p->next;} if(tmp==NULL)//要插到开头 { start->next=cur; end->next=cur->next; cur->next=p; }else if(p==cur)//插到结尾 end=end->next; else//查到中间tmp与p之间 { end->next=cur->next; tmp->next=cur; cur->next=p; } cur=nxt; } return start->next; }};
0 0
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- 147. Insertion Sort List
- AsyncHttpClient实现上传 HttpURLConnection实现下载
- 栈的应用2:中缀转后缀及计算
- 关于集合子类父类关系的全面总结 ,以及遍历方法的总结 全
- 【Android - MD】之CoordinatorLayout的使用
- OpenGL ES 片元操作
- 147. Insertion Sort List
- Android开发——LinearLayout和RelativeLayout的性能对比
- ajax
- noi题库—搜索—分成互质组
- Argparse简易教程[转载]
- 23种设计模式
- shiro收获
- MR 代码优化及Hive优化(Hive中的存储格式与压缩格式)
- Java GC 源码分析(1)