# Umordnen einer dyn. Liste



## JabbaJava (16. Jan 2022)

Hallo zusammen, könnte mir jemand helfen folgenden Code zu verstehen/nachzuvollziehen?

[CODE lang="java" title="Umordnen einer Liste"]class Node {
    int val;
    Node next;
    Node(int v, Node n) { val = v; next = n; }
}

public class A2 {

    // Read a sequence of integers and link them into a list
    static Node readList() {
        In.open("input.txt");
        Node head = null;
        int val = In.readInt();
        while (In.done()) {
            head = new Node(val, head);
            val = In.readInt();
        }
        In.close();
        return head;
    }

    // Move all negative elements in front of all positive elements
    static Node reorder(Node list) {
        Node p = list, last = null;
        while (p != null) {
            if (p.val < 0 && last != null) {
                last.next = p.next;
                p.next = list;
                list = p;
                p = last.next;
            } else {
                last = p;
                p = p.next;
            }
        }
        return list;
    }

    static void print(Node list) {
        for (Node p = list; p != null; p = p.next) Out.print(p.val + " ");
        Out.println();
    }

    public static void main(String args[]) {
        Node list = readList();
        print(list);
        list = reorder(list);
        print(list);
    }
}

/*
Sample input:
6 -27 67 -52 -3 8 98 -3 37 -2 -97 46 2
*/[/CODE]

In.open öffnet eine Text-Datei und mit In.read() wird aus dieser Datei nach und nach eine Zahl eingelesen (Die Bibliothek gehört zum Übungsbuch)

Mein Problem ist, dass ich mir das ganze irgendwie nicht so richtig vorstellen kann - wenn man das so sagen kann. 

Mein Ansatz soweit:

In readList() wird die Liste erzeugt, erst wird der Knoten mit dem Wert 6 erzeugt und dieser 'head'zugewiesen. Dann wird der Knoten -27 an den Knoten 6 (in 'next') angehängt und dieser wird dann zu 'head'. Usw. bis der Knoten mit Wert 2 'head' ist. Dieser wird dann an den Aufrufer der Methode 'list' in der Main zurückgegeben.

Hoffe soweit ist das richtig? 

Mit der Methode reorder() hab ich nun so meine Probleme...
In der Variable 'p' ist nun also der head-knoten. Und mit 'last' wird ein neuer Knoten deklariert. Dann werden die Knoten in der while-schleife durchgegangen:
Hier werden nun die Zeiger von next und list irgendwie vertauscht *(??) *Spätestens hier komm ich dann irgendwie ins stottern... 



Vielen dank schonmal !


----------

