2017-04-17 189 views
0

我做了鏈表不是從Java集合,我把它放在很多方法..我的鏈接列表工作像原來的一個,但theres一個小的差異我的班級有一個打印排序方法我的輸入是:[5,18,3,10,2] ...或者它可以是一個字符串輸入 ..我想排序方法來排序鏈表,所以輸出應該是像這樣:[2,3,5,10,18]或排序字符串 這裏是分類方法代碼:鏈接列表實現分類方法

 public void sort(){ 
     Node<E> current = head ; 
     Node<E> current2 = current.next; 
     E min = head.element; 
     E temp; 
     int pos = 0; 
     for (int i = 0; i < size-1; i++) { 
      for (int j = 0; j < size; j++) { 
       if(current2 != null){ 
        if(min.compareTo(current2.element) > 0){ 
         pos = j ; 
         min = current2.element; 

        } 
        current2= current2.next; 
       } 
      } 

      temp = current.element; 
      current.element = min; 
      current = current.next; 
      min = current.element; 
      current2 = head; 
      for (int j = 0; j <= pos; j++) { 
       if(current2 !=null){ 
       if(j==pos){current2.element = temp;} 
       current2= current2.next; 
       } 
      } 
      current2 = current.next; 
    } 
} 

heres the full code

+0

'我試了很難,但沒有奏效'什麼都行不通?有沒有錯誤?如果是,請在這裏發佈完整的堆棧跟蹤。此外,有一個最小的完整示例來說明問題會很有用。 – BackSlash

+0

@BackSlash好的,我編輯它 –

+0

一個完整的例子仍然缺失。添加一個包含示例數據的完整程序,用於演示問題 – BackSlash

回答

1

試試這種排序方法。

public void sort() 
    { 
    for (int i = size - 1; i >= 1; i--) 
    { 
     Node<E> finalNode = head; 
     Node<E> tempNode = head; 

     for (int j = 0; j < i; j++) 
     { 
     E val1 = head.element; 
     Node<E> nextnode = head.next; 
     E val2 = nextnode.element; 
     if (val1.compareTo(val2)) 
     { 
      if (head.next.next != null) 
      { 
      Node<E> CurrentNext = head.next.next; 
      nextnode.next = head; 
      nextnode.next.next = CurrentNext; 
      if (j == 0) 
      { 
       finalNode = nextnode; 
      } 
      else 
       head = nextnode; 

      for (int l = 1; l < j; l++) 
      { 
       tempNode = tempNode.next; 
      } 

      if (j != 0) 
      { 
       tempNode.next = nextnode; 

       head = tempNode; 
      } 
      } 
      else if (head.next.next == null) 
      { 
      nextnode.next = head; 
      nextnode.next.next = null; 
      for (int l = 1; l < j; l++) 
      { 
       tempNode = tempNode.next; 
      } 
      tempNode.next = nextnode; 
      nextnode = tempNode; 
      head = tempNode; 
      } 
     } 
     else 
      head = tempNode; 
     head = finalNode; 
     tempNode = head; 
     for (int k = 0; k <= j && j < i - 1; k++) 
     { 
      head = head.next; 
     } 

     } 
    } 
    }