leetcode148
leetcode 148
Given the
head
of a linked list, return the list after sorting it in ascending order.
Follow up: Can you sort the linked list in
O(n logn)
time andO(1)
memory (i.e. constant space)?
题意
把链表进行排序输出,但是只能使用o1的空间,nlogn的时间。
思路
使用nlogn的方法来进行排序只有快排还有归并,但是都是用来递归,那空间就是on。所以只能使用迭代的方法来进行排序。
地带也是给予归并的,就是我们手动从下到上,手动进行排序。排序完成一层厚,再次进行下一层来排序。
现在我们进行引进dummy还有cur,dummy使用尾插法,来构建新的完整的链表(这是新一层的)
每一层开始的时候p=q=head,
然后q多走i补来达到下一组的开始
然后引进p还有q,pq是两组的开头,对pq进行循环遍历,次数小于1,2,4,(这是分组的方式)。同事还有一个 o,o是2i的位置(表示新的一组开始进行排序,连接),这个都是用cur来进行尾插法。之后再把head=o,开始进行下一组
完成一层厚,我们让head=dummy-》next。
例子
[4,3,1,7,8,9,2,11,5,6]
.这个进行排序
1 | step=1: (3->4)->(1->7)->(8->9)->(2->11)->(5->6) |
我们可以看第一轮i=1,dummy->next表示step1这个完整的链表(3417.。),cur都是尾插法,然后p=4,q=3,o=1,34
结束后就是head=o,p=head=1,q=7,然后接着进行更新
代码
1 | /** |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.