2016-03-19 9 views
0

Durch den Neustart von Node2 an der Front und bringen es auf einen kleineren Index jedes Mal dachte ich, dass Swap könnte funktionieren.
Ein Eingang als J I O L Ausgänge als L J I OIch würde gerne versuchen, diese LinkedList umzukehren, ohne getPreviousNode zu verwenden

public static void swap(Node one, Node two) { 
    String temp1, temp2; 
    temp1 = one.getData(); 
    temp2 = two.getData(); 
    two.setData(temp1); 
    one.setData(temp2); 
} 

public static void reverse(LinkedList list) { 
    int index = 0; 
    Node curr1 = list.getFront(); 
    Node curr2= list.getFront(); 
    for (int i = 0; i <= list.size()/2; i++) { 
     for (int j = 0; j <= list.size() - index; j++) { 
      curr2 = curr2.getNext(); 
      index++; 
     } 
     swap(curr1, curr2); 
     curr1 = curr1.getNext(); 
    } 
    } 

Jede Hilfe sehr geschätzt

+0

Kannst du nicht einfach java.util.Collections.reverse() -Methode verwenden? – scana

Antwort

0

Diese Funktion wäre scheint auch ziemlich kompliziert für das, was Sie erreichen wollen. Wenn Sie nur die Liste umkehren möchten, verwenden Sie diese.

Collections.reverse(list);

"Ein Eingang als JIOL Ausgänge als LJIO"

Wenn Sie dies wollen, könnten Sie gehen mit:

list.add(0,list.removeLast());

0

Basierend auf Ihren Code, mit dem Sie das eigene Implementierung von LinkedList, also nehme ich an, dass Sie es aus welchem ​​Grund auch immer selbst implementieren möchten.

Wenn ja, verwenden Sie folgenden Code:

public void ReverseLinkedList (LinkedList linkedList) 
{ 
    LinkedListNode start = linkedList.Head; 
    LinkedListNode temp = null; 

    // ------------------------------------------------------------ 
    // Loop through until null node (next node of the latest node) is found 
    // ------------------------------------------------------------ 

    while (start != null) 
    { 
     // ------------------------------------------------------------ 
     // Swap the “Next” and “Previous” node properties 
     // ------------------------------------------------------------ 

     temp = start.Next; 
     start.Next = start.Previous; 
     start.Previous = temp; 

     // ------------------------------------------------------------ 
     // Head property needs to point to the latest node 
     // ------------------------------------------------------------ 

     if (start.Previous == null) 
     { 
      linkedList.Head = start; 
     } 

     // ------------------------------------------------------------ 
     // Move on to the next node (since we just swapped 
     // “Next” and “Previous” 
     // “Next” is actually the “Previous” 
     // ------------------------------------------------------------ 

     start = start.Previous; 
    } 

    // ------------------------------------------------------------ 
    // That's it! 
    // ------------------------------------------------------------ 
} 

Was ich von http://www.codeproject.com/Articles/27742/How-To-Reverse-a-Linked-List-Different-Ways bekam. Sie zeigen sogar 2 andere Möglichkeiten, um dieses Problem zu lösen.

In jedem anderen Fall, empfehle ich Ihnen aufrichtig java.utils.Collections.reverse() verwenden :)