linked list per reverse() "umdrehen"

Status
Nicht offen für weitere Antworten.

javalala

Mitglied
nabend leute.

vertiefe mich grade etwas in das thema datenstrukturen und bin auf folgende aufgabe gestoßen zu der ich erst mal nicht weiter weiss. :bahnhof:

1.Aufgabe (Liste, stack, queue, array)
Schreiben sie Java-Code für eine Methode reverse(), die als Parameter eine durch ihren First-Pointer gegebene einfach verkettete Liste erhält. Die Methode soll als Rückgabewert einen First-Pointer auf eine Liste liefern, die der ursprünglichen in umgekehrter Reihenfolge entspricht. Für eine Lösung, bei der die einzelnen Listenelemente nicht zwischengespeichert werden, gibt es Extrapunkte.

weiss nicht so recht wie ich diese aufgabe angehen soll.bin dankbar für jegliche anregung etc.

gruß javalala :###
 

Der Müde Joe

Top Contributor
eine LLElement enthält ja einen Pointer (referenz) auf das nächste Element der Kette und das letzte auf null:

1 - 2 - 3 - 4 - null;

also Element 1 zeigt auf Element 2 .... und 4 auf null

nachher

1 zeigt auf null ... 4 auf 3
2 zeigt auf 1 ... 3 auf 2 ...

das System sollte also klar sein

EDIT
4 - 3 - 2 - 1 - null
so ists nachher
 

javalala

Mitglied
hallo joe.

danke schon mal für deine antwort so spät am abend :)
ja also das system/konzept ist mir soweit klar, aber wie könnte ich das programmiertechnisch umsetzen (ohne zwischenspeicherung wie "gefordert")? vllt mit einem zusätzlichen array?

gruß
 

Ariol

Top Contributor
Code:
//Beispielliste anlegen
		List<Integer> ll = new LinkedList<Integer>();
		ll.add(1);
		ll.add(2);
		ll.add(3);
		ll.add(4);
		ll.add(5);
		ll.add(6);
		ll.add(7);
		ll.add(8);

		//Testausgabe
		System.out.println(ll.toString());
		
		//Drehen
		for(int i = ll.size()-1; i>=0; i--)
		{
			ll.add(ll.get(i));
			ll.remove(i);
		}
		
		//Testausgabe
		System.out.println(ll.toString());
 

Der Müde Joe

Top Contributor
so auf die schnell

nimm 1. Element: setze next auf null
temp= 1;
tempNext: next
nimm 2. Element (tempNext): setze next auf temp
temp=2;
tempNext: next
nimm 3. Element: setze next auf temp
tempNext: next
.....
nimm letztes Element: .... auf temp (2.letztes)

....return letztes Element...welches auf 2. l zeigt...welches auch 3.l zeigt...----..welches auf null zeigt.

halt eben so auf schnell

EDIT:
@Ariol...hab ich mit auch gedacht...aber
>die als Parameter eine durch ihren First-Pointer gegebene einfach verkettete Liste erhält
also reverse(Element first);
 

javalala

Mitglied
@ariol
ja das wäre eine schöne lösung aber bekomme ja leider nur den firstpointer übergeben.

@joe
diesen weg versteh ich noch nicht so richtig

nimm 1. Element: setze next auf null
temp= 1;
tempNext: next

da versteh ich schon nicht so recht was was ist.aber war ja auch nur auf die schnelle und es ist ja schon spät...
ich schau es mir morgen früh nochmal genau an, vllt kannst du ja morgen noch eine etwas detaillierte version posten wenn du willst, wäre jedenfalls cool :)

gruß
 

Der Müde Joe

Top Contributor
javalala hat gesagt.:
@joe
diesen weg versteh ich noch nicht so richtig

nimm 1. Element: setze next auf null
temp= 1;
tempNext: next

du erhälst das 1. element (mit Referenz auf das 2.)

also
tempLast = null (Schluss);

nimm dieses Element (firstPointer).
speichere die Referenz auf das nächste Element ( tempNextElementToChange = Element.next)
speichere als neues next das tempLast (Element.next = tempLast)
speichere das aktuelle Element (tempLast = Element)

nun das ganze mit dem nächsten element ( tempNextElementToChange ) usw...
wenn das tempNextElementToChange == null ist das ende erreicht (nun das erste element mit einer referenz auf das zweitlezte)
 

javalala

Mitglied
morgen.

also ich paste grade mal den code von der liste mit der ich arbeite.

Code:
package aufgabe1;

////////////////////////////////////////////////////////////////
class Link
   {
   public int iData;              // data item (key)
   public double dData;           // data item
   public Link next;              // next link in list
// -------------------------------------------------------------
   public Link(int id, double dd) // constructor
      {
      iData = id;
      dData = dd;
      }
// -------------------------------------------------------------
   public void displayLink()      // display ourself
      {
      System.out.print("{" + iData + ", " + dData + "} ");
      }
   }  // end class Link
////////////////////////////////////////////////////////////////
class LinkList
   {
   private Link first;            // ref to first link on list

// -------------------------------------------------------------
   public LinkList()              // constructor
      {
      first = null;               // no links on list yet
      }
// -------------------------------------------------------------
   public void insertFirst(int id, double dd)
      {                           // make new link
      Link newLink = new Link(id, dd);
      newLink.next = first;       // it points to old first link
      first = newLink;            // now first points to this
      }
// -------------------------------------------------------------
   public Link find(int key)      // find link with given key
      {                           // (assumes non-empty list)
      Link current = first;              // start at 'first'
      while(current.iData != key)        // while no match,
         {
         if(current.next == null)        // if end of list,
            return null;                 // didn't find it
         else                            // not end of list,
            current = current.next;      // go to next link
         }
      return current;                    // found it
      }
// -------------------------------------------------------------
   public Link delete(int key)    // delete link with given key
      {                           // (assumes non-empty list)
      Link current = first;              // search for link
      Link previous = first;
      while(current.iData != key)
         {
         if(current.next == null)
            return null;                 // didn't find it
         else
            {
            previous = current;          // go to next link
            current = current.next;
            }
         }                               // found it
      if(current == first)               // if first link,
         first = first.next;             //    change first
      else                               // otherwise,
         previous.next = current.next;   //    bypass it
      return current;
      }
// -------------------------------------------------------------
   public void displayList()      // display the list
      {
      //System.out.print("List (first-->last): ");
      Link current = first;       // start at beginning of list
      while(current != null)      // until end of list,
         {
         current.displayLink();   // print data
         current = current.next;  // move to next link
         }
      System.out.println("");
      }

habe jetzt mal versucht das umzusetzen, irgendwie steh ich aufm schlauch, weiss nich wieso ich mir da so schwer tue...

Code:
package aufgabe1;

public class Umdrehen {

	private static aufgabe1.LinkList mylist = new aufgabe1.LinkList();
	
	public static void fill() {
		for (int i = 4; i >= 0; i--) {
			mylist.insertFirst(i, 0.0);
		}
	}
	
	public static Link reverse(Link firstLink) {
		Link current = firstLink;
		Link tempNextElementToChange = current;
		Link tempLast = null;
		
		while (tempNextElementToChange != null) {
			tempNextElementToChange = current.next;
			current.next = tempLast;
			tempLast = current;
		}
		return current;
	}
	
	public static void main(String[] args) {
		fill();
		mylist.displayList();
		reverse(mylist.find(0));
		System.out.println("----");
		mylist.displayList();
	}
}

:oops:
 

Der Müde Joe

Top Contributor
bei deiner reverse bleibt "current" immer das erste elemnt

das aktuelle Element ist nat. das was im durchgang davor
als nextToChange deklarieret wurde.
 
T

tuxedo

Gast
Mir fällt da spontan "BubbleSort" ein... Nur um mal ein tolles Stichwort in den Raum zu werfen.
 

Der Müde Joe

Top Contributor
alex0801 hat gesagt.:
Mir fällt da spontan "BubbleSort" ein... Nur um mal ein tolles Stichwort in den Raum zu werfen.

mir fälllt spontan "Bierpause" ein..... :D

>Schreiben sie Java-Code für eine Methode reverse(), die als Parameter eine durch ihren First-Pointer gegebene einfach verkettete Liste erhält.

also kanns nur in der Braun'schen Röhre blubbern. :cool:
 
T

tuxedo

Gast
Ich sagte ja auch "spontan" und nicht "durchdacht" ;-)

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
G Linked List zwischen zwei Threds übergeben Allgemeine Java-Themen 11
Rakshan Reading through list of objects Allgemeine Java-Themen 8
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
M List -Tableview-Javafx-Vererbung Allgemeine Java-Themen 35
R convert 2d array list to 2d array Allgemeine Java-Themen 1
B List<Integer> ist List<Double> ? Allgemeine Java-Themen 6
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
J Array-List Bubble-Sort Allgemeine Java-Themen 12
U javax.mail.Folder.list() zeigt nicht alle Ordner Allgemeine Java-Themen 5
Hacer List<? super E> Allgemeine Java-Themen 10
C Objekte in Array List speichern? Allgemeine Java-Themen 1
P List<Type> Konvertieren in List<List<Type>> Allgemeine Java-Themen 3
P Sorted List o.ä. Allgemeine Java-Themen 2
M Erste Schritte List<> unbekannt?? Allgemeine Java-Themen 8
M List casting error Allgemeine Java-Themen 3
Messoras List zeigt nur das letzte Element an Allgemeine Java-Themen 14
K Collections Collection<> mit List<String> abgleichen? Allgemeine Java-Themen 10
A List<String> auf doppelte Einträge überprüfen Allgemeine Java-Themen 4
U EJB Entity mit List Problem Allgemeine Java-Themen 2
? Objects aus List aussortieren Allgemeine Java-Themen 9
B List Pointer zurücksetzen Allgemeine Java-Themen 10
J Elemente zu einer List hinzufügen? Allgemeine Java-Themen 9
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
N List auf null prüfen Allgemeine Java-Themen 2
G List<Person> sortieren Allgemeine Java-Themen 6
A Probleme mit ConcurrentHashMap und List Allgemeine Java-Themen 3
C Komisches Verhalten zwischen Set und List bei contains Allgemeine Java-Themen 6
N Inverted index / inverted list Allgemeine Java-Themen 2
X Eine Map mit X -> List<Y>? Allgemeine Java-Themen 8
Shoox HashMaps in List? Allgemeine Java-Themen 3
B Frage zu Interface und List Allgemeine Java-Themen 4
H List wird nicht richtig gefüllt Allgemeine Java-Themen 6
Z aus private List<???> list eintrag löschen Allgemeine Java-Themen 4
L List <Hauser> in Combobox einfügen Allgemeine Java-Themen 5
isowiz java.util.List: Sortierung nicht nach bestimmten Attribut? Allgemeine Java-Themen 4
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
E Speicher frei machen (List) Allgemeine Java-Themen 9
K List in Teillisten zerlegen Allgemeine Java-Themen 2
B Probleme mit awt.List in Chatprogramm Allgemeine Java-Themen 14
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
B List = ArrayList ? Allgemeine Java-Themen 12
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
G Byte- List mit einem Iterator durchlaufen Allgemeine Java-Themen 5
S List<Double> oder Double[] in double[] zu konvertieren Allgemeine Java-Themen 6
G Methode akzeptiert List<ParentClass> aber nicht List&l Allgemeine Java-Themen 2
G List- Einträge löschen Allgemeine Java-Themen 3
G java.util.List klonen Allgemeine Java-Themen 17
S Collections.binarySearch(list,"a") Allgemeine Java-Themen 7
K Bound mismatch: The generic method sort(List<T>) of ty Allgemeine Java-Themen 4
K "Too many open files" bei Property List Allgemeine Java-Themen 5
P List in Hashmap schreiben Allgemeine Java-Themen 5
P java.util.List - Typ überschreiben Allgemeine Java-Themen 9
G Arraylist statt List - Sehr schlimm? Allgemeine Java-Themen 8
G List mit selbstdefinierten Objekten sortieren Allgemeine Java-Themen 2
M Datenstrukrue, List<Map<Integer, Map<String, . Allgemeine Java-Themen 2
F List<String> zu byte[] Allgemeine Java-Themen 7
G Map oder List mit festgelegter Reihenfolge Allgemeine Java-Themen 4
M Pendant zu list() und array() aus PHP in Java gegeben? Allgemeine Java-Themen 5
J Problem mit List Allgemeine Java-Themen 2
byte Generic Type einer List zur Laufzeit rausfinden? Allgemeine Java-Themen 4
S Generics List Allgemeine Java-Themen 3
G Inhalt einer Textdatei in eine AWT List schreiben Allgemeine Java-Themen 3
C access control list in java Allgemeine Java-Themen 7
T List.isEmpty() klappt nicht?!?!? Allgemeine Java-Themen 5
D Reverse engineering Android App Allgemeine Java-Themen 4
S Reverse Engineering bei Java Programmen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben