1. 程式人生 > >【演算法】以給定值x為基準將連結串列分割成兩部分,所有小於x的結點排在大於或等於x的節點之前

【演算法】以給定值x為基準將連結串列分割成兩部分,所有小於x的結點排在大於或等於x的節點之前

/*
       * 直接建立兩個連結串列:一個連結串列存放小於x的元素,另一個存放大於或等於x的元素。
       * 然後迭代訪問整個連結串列,將元素插入before或者after連結串列前端!!!一旦抵達連結串列末端,則表明拆分完畢,最後合併兩個連結串列。
       */
      public static LinkedListNode partition2(LinkedListNode node, int x){
             if( node== null)
                   return null;
            
            LinkedListNode beforeStart= null;
            LinkedListNode afterStart= null;
            
             while( node!= null){
                  LinkedListNode next= node. next;
                   node. next= null;
                   if( node. data< x){
                         node. next= beforeStart;
                         beforeStart= node;
                  } else{
                         node. next= afterStart. next;
                         afterStart= node;
                  }
            }
            
             if( beforeStart== null)
                   return afterStart;
            
            LinkedListNode head= beforeStart;
             while( beforeStart. next!= null){
                   beforeStart= beforeStart. next;
            }
             beforeStart. next= afterStart;
            
             return head;
      }

連結串列(四)——以給定值x為基準將連結串列分割成兩部分,所有小於x的結點排在大於或等於x的節點之前