Stack in eine verkettete Liste pushen

babuschka

Top Contributor
Hallo zusammen,
habe folgendes Problem. Ich würde gerne einen Stack in eine verkettete Liste pushen.

Java:
public class List<E>{
	private Node first;
	private Node last;
	
	public List(Stack s){
		first=last=null;
		List help = new List(s);
		while(!s.isEmpty()){
			 help = push(s.pop()); // FEHLER!!!
		}
	}

Ich weiss das es so nicht funktionieren kann. Komme aber gerade nicht auf einen grünen Zweig. Vielleicht hat jemand einen Denkanstoß?
 
mach dir eine Methode [c]public void add(E element)[/c]. Danach funktioniert folgendes:
Java:
public List(Stack<E> stack) {
    while (!stack.isEmpty()) {
        add(stack.pop());
    }
}
 
Dank Dir. Dachte ich könnte das alles über den Konstruktor regeln ohne eine Zusatz Methoden schreiben zu müssen.

Wenn ich einen Stack in eine Queue fülle kann ich das ja über den Konstruktor regeln.
 
Java:
package Listen;

public class List<E>{
	private Node first;
	private Node last;
	
	public List(Stack<E> stack) {
	    while (!stack.isEmpty()) {
	        add(stack.pop());
	    }
	}
	
	public void add(E element){
		Node help = first;
		if(help == null){
			help = new Node();
			help = last;
		}else{
			Node newNode = new Node();
			newNode.setElement(element);
			newNode.setNext(help);
			help = newNode;
		}
	}
	
	public String toString(){
		String Ausgabe = " ";
			
		for(Node x = first; x != null; x = x.getNext()){
			Ausgabe += x.getElement() + ", ";
			}
			return Ausgabe + " ";
	}
	
	
	public static void main(String[] args) {
		Stack<String> ersterStack = new Stack<String>();
		
		ersterStack.push("Test1");
		ersterStack.push("Test2");
		
		List<String> eins = new List<String>(ersterStack);
		System.out.println(eins);
		
	}


}

Hab irgendwie keine Ausgabe...Vielleicht ist es auch einfach zu warm dafür 😛
 
Deine add Methode macht keinen Sinn.
Du weist weder first, noch last etwas zu deswegen wird keine Liste aufgebaut.
Die lokale Variable help brauchst du gar nicht
Java:
public void add(E element){
        if(null==first)//Defensives Programmieren, nur für den fall das man mal ein = vergisst
        {
            first = new Node();
            first.setElement(element);
            last=first;
        }else{
            Node newNode = new Node();
            newNode.setElement(element);
            last.setNext(newNode);
            last = newNode;
        }
    }
So müsste es in etwa aussehen.
 

Neue Themen


Zurück
Oben