链表划分(引申到快速排序)

来源:互联网 发布:php开源做账系统 编辑:程序博客网 时间:2024/04/30 11:26

本总结是是个人为防止遗忘而作,不得转载和商用。

题目

         给定一个链表和一个值x,将链表划分成两部分,使得划分后小于x的结点在前,大于等于x的结点在后。在这两部分中要保持原链表中的出现顺序。

         如:给定链表1→43→2→5→2和x = 3,

         返回:

                  1→2→2→4→3→5。

分析

   新建两个指针p1和p2。

         遍历一遍链表:

                   第一个1:比3小,放在p1后面:

                            p1-> 1

                   第二个4:比3大,放在p2后面:

                            P2 -> 4

                   第三个3:比3不小,放在p2后面:

                            p2-> 4 -> 3

                   重复以上过程

         最后把p2放在p1的尾端,就实现了题目要求。

复杂度

         时间复杂度是O(N),空间复杂度为O(1);

扩展

         话说,如果再选个数(如:1.5)继续做上面的事情,然后再选个数做上面的事,再选个数….就这样不停的做这件事,这就是快速排序!

 

0 0