Code:
class Node {
int val;
Node next;
Node(int val) {
this.val = val;
}
}
public class A2UmordnungEinerListe {
//read a sequence of integers and link them into a list
static Node readList() {
In.open("input.txt");
Node head = null;
Node tail = null;
int val = In.readInt();
while(In.done()) {
Node p = new Node(val);
if(head == null)head = p; else tail.next = p;
tail = p;
val = In.readInt();
}
In.close();
return head;
}
//Move all negative elements in front of all the positive values
static Node reorder(Node list) {
Node p = list;
Node 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;
}
Ich möchte ein Programm erstellen, dass eine Liste umordnet, also so, dass bei einer Liste mit negativen und positiven Knoten die in zufälliger Reihenfolge, alle negativen vor den positiven Knoten stehen. Die Reihenfolge unter positiven bzw. negativen ist egal.
Laut Musterlösung sieht das so aus.
Meine Frage betrifft die Methode reorder. Und zwar verstehe ich nicht ganz wie die Werte innerhalb der if Bedingung verändert werden. Gehen wir von einer Liste mit den Werten
6 -27 67 -52 -3 8 98 -3 37 -2 -97 46 2 aus.
Zu Beginn : list = 6, last = 6, dann ist last.next=-27, p.next=67, p = -27 oder?
Dann wäre im nächsten Schritt last.next = 67, p.next = 6, list = -27, p = 67 und last würde zunächst bei 6 bleiben. Richtig?
Dann aber würde im nächsten Schritt last = 67 und im übernächsten last wieder = 6 sein, weil p.next ja 6 war.
Ist das so richtig, und wie würde es dann weitergehen?
Vielen Dank für eure Antwort im Voraus. Sitze schon sehr lang an diesem Beispiel, hoffe ihr könnt mir helfen!
LG