Lineare listen verkettung

Diskutiere Lineare listen verkettung im Java Basics - Anfänger-Themen Bereich.
S

Sandro95

Guten Abend , ich weiß habe viele fragen sorry dafür:D

Bei mir funktioniert die Verkettung iwie nicht , die 12 wird übersprungen und bei der iter() Methode komme ich in einer endlosschleife ..
Bei der verkettung ist das doch theortischeinfach , von der ersten liste this,ende.nächster = neu.anfang und this.ende=neu.ende

Vergisst die anderen Methoden habe viele mehrfach als Übung also geht es hierbei um die Methode verkeeeetten() :)

Java:
  public class Link {
 
    public int wert ;
    public Link nächster;
 
    public Link(int wert , Link nächster) {
        this.wert=wert;
        this.nächster=nächster;
    }

}

 
public class Liste {

    public Link anfang;
    public Link ende;

    public Liste(Link anfang) {
        this.anfang = anfang;
        this.ende = anfang;
    }

    public void add(Link neu) {

        if (this.anfang == null) {
            this.anfang = neu;
            this.ende=neu;
        } else {
            this.ende.nächster = neu;
            ende = ende.nächster;
        }

    }

    public void iter() {
        Link a = anfang;

        while (a != null) {

            System.out.print(a.wert + " ");

            a = a.nächster;
        }

    }

    public void anzEl() {
        Link a = anfang;
        int count = 0;

        while (a != null) {

            ++count;
            a = a.nächster;
        }
        System.out.println("Die liste besitzt " + count + " an Elementen");
    }

    public void fügeWertein(int value) {
        Link neu = new Link(value,null);
        Link a = anfang;
     
        while(a.nächster!=null) {
         
            if(a.wert==value) {
                System.out.println("Wert schon vorhanden");
                return;
             
            }
            a=a.nächster;
        }
        a.nächster=neu;
     
    }
 
 
 
     

    public boolean findWert(int wert) {

        Link a = anfang;

        while (a != null) {

            if (a.wert == wert) {
                return true;
            }

            a = a.nächster;

        }
        return false;

    }

    public void verketten(Liste neu) {

        this.ende.nächster = neu.anfang;
        this.ende = neu.ende;

    }

    public Liste kopieren(Liste alt) {
        Link a = anfang;

        Liste neu = new Liste(a);

        while (a != null) {

            System.out.print(a.wert + " ");
            a = a.nächster;
        }
        return neu;

    }

    public void aaaad(Link neu) {

        if (this.anfang == null) {
            this.anfang = neu;
        }
        if (this.anfang != null) {
            this.ende.nächster = neu;
            this.ende = ende.nächster;
        }
    }

    public void aaaaaaaaaaad(int wert) {
        Link neu = new Link(wert, null);

        if (this.anfang == null) {
            this.anfang = neu;
        } else {
            this.ende.nächster = neu;
            this.ende = ende.nächster;
        }

    }

    public Liste coooopy() {
        Link a = anfang;

        Liste neu = new Liste(a);

        while (a != null) {

            System.out.print(a.wert + " ");
            a = a.nächster;
        }
        return neu;

    }
    public void loescheWert(int wert) {
     
        Link a = anfang ;
     
        while(a.nächster!=null ) {
         
            if(a.wert==wert) {
                try {
                    a.nächster=a.nächster.nächster;

                 
                }
                catch(Exception e) {
                    a.nächster=null;
                    ende=a;
                }
            }
            a=a.nächster;
        }
    }
 
    public void aaaaaaaaddd(int wert) {
        Link neu = new Link(wert,null);
     
        if(this.anfang==null) {
            this.anfang=neu;
            this.ende=neu;
        }
        else {
            this.ende.nächster=neu;
            this.ende=this.ende.nächster;
         
         
        }
    }
    public void verkeeeetten(Liste neu) {
     
        if(this.anfang==null) {
            this.anfang=neu.anfang;
        }
        else {
            this.ende.nächster=neu.anfang;
            this.ende=neu.ende;
         
            System.out.print(this.ende.nächster.wert + " ");
            System.out.print(this.ende.wert+ " ");
         
            neu.anfang=null;
            neu.ende=null;
         
         

         
        }
     
     
     
    }

}

public class Main {

    public static void main(String[] args) {
        Link eins = new Link(1, null);
        Link zwei = new Link(2, null);
        Link drei = new Link(1, null);
     
        Link a = new Link(100, null);
        Link b = new Link(12, null);
        Link c = new Link(3, null);
     
        Liste list = new Liste(eins);
        Liste list2 = new Liste(a);
     
        list.add(eins);
        list.add(zwei);
        list.add(drei);
        list.aaaad(c);
//        list.aaaaaaaaaaad(999);
     
        list2.add(b);
        list2.add(c);
     
        list.iter();
        System.out.println();
     
//        list.fügeWertein(2);
//        list.fügeWertein(100);
//        System.out.println();
////        System.out.println(list.findWert(2));
//        list.verketten(list2);
        list.iter();
//        System.out.println(        list2.kopieren(list)
//        list.iter();
//        list.coooopy();
//        list.loescheWert(2);
//        list.iter();
        list.verkeeeetten(list2);
        list.iter();
    }

}
 
Zuletzt bearbeitet von einem Moderator:
L

LimDul

Wenn du es in richtige Code-Tags packt, wird es schöner:

Java:
public class Link {

public int wert ;
public Link nächster;

public Link(int wert , Link nächster) {
this.wert=wert;
this.nächster=nächster;
}

}


public class Liste {

public Link anfang;
public Link ende;

public Liste(Link anfang) {
this.anfang = anfang;
this.ende = anfang;
}

public void add(Link neu) {

if (this.anfang == null) {
this.anfang = neu;
this.ende=neu;
} else {
this.ende.nächster = neu;
ende = ende.nächster;
}

}

public void iter() {
Link a = anfang;

while (a != null) {

System.out.print(a.wert + " ");

a = a.nächster;
}

}

public void anzEl() {
Link a = anfang;
int count = 0;

while (a != null) {

++count;
a = a.nächster;
}
System.out.println("Die liste besitzt " + count + " an Elementen");
}

public void fügeWertein(int value) {
Link neu = new Link(value,null);
Link a = anfang;

while(a.nächster!=null) {

if(a.wert==value) {
System.out.println("Wert schon vorhanden");
return;

}
a=a.nächster;
}
a.nächster=neu;

}





public boolean findWert(int wert) {

Link a = anfang;

while (a != null) {

if (a.wert == wert) {
return true;
}

a = a.nächster;

}
return false;

}

public void verketten(Liste neu) {

this.ende.nächster = neu.anfang;
this.ende = neu.ende;

}

public Liste kopieren(Liste alt) {
Link a = anfang;

Liste neu = new Liste(a);

while (a != null) {

System.out.print(a.wert + " ");
a = a.nächster;
}
return neu;

}

public void aaaad(Link neu) {

if (this.anfang == null) {
this.anfang = neu;
}
if (this.anfang != null) {
this.ende.nächster = neu;
this.ende = ende.nächster;
}
}

public void aaaaaaaaaaad(int wert) {
Link neu = new Link(wert, null);

if (this.anfang == null) {
this.anfang = neu;
} else {
this.ende.nächster = neu;
this.ende = ende.nächster;
}

}

public Liste coooopy() {
Link a = anfang;

Liste neu = new Liste(a);

while (a != null) {

System.out.print(a.wert + " ");
a = a.nächster;
}
return neu;

}
public void loescheWert(int wert) {

Link a = anfang ;

while(a.nächster!=null ) {

if(a.wert==wert) {
try {
a.nächster=a.nächster.nächster;


}
catch(Exception e) {
a.nächster=null;
ende=a;
}
}
a=a.nächster;
}
}

public void aaaaaaaaddd(int wert) {
Link neu = new Link(wert,null);

if(this.anfang==null) {
this.anfang=neu;
this.ende=neu;
}
else {
this.ende.nächster=neu;
this.ende=this.ende.nächster;


}
}
public void verkeeeetten(Liste neu) {

if(this.anfang==null) {
this.anfang=neu.anfang;
}
else {
this.ende.nächster=neu.anfang;
this.ende=neu.ende;

System.out.print(this.ende.nächster.wert + " ");
System.out.print(this.ende.wert+ " ");

neu.anfang=null;
neu.ende=null;




}



}

}

public class Main {

public static void main(String[] args) {
Link eins = new Link(1, null);
Link zwei = new Link(2, null);
Link drei = new Link(1, null);

Link a = new Link(100, null);
Link b = new Link(12, null);
Link c = new Link(3, null);

Liste list = new Liste(eins);
Liste list2 = new Liste(a);

list.add(eins);
list.add(zwei);
list.add(drei);
list.aaaad(c);
// list.aaaaaaaaaaad(999);

list2.add(b);
list2.add(c);

list.iter();
System.out.println();

// list.fügeWertein(2);
// list.fügeWertein(100);
// System.out.println();
//// System.out.println(list.findWert(2));
// list.verketten(list2);
list.iter();
// System.out.println( list2.kopieren(list)
// list.iter();
// list.coooopy();
// list.loescheWert(2);
// list.iter();
list.verkeeeetten(list2);
list.iter();



}

}
 
S

Sandro95

Wenn du es in richtige Code-Tags packt, wird es schöner:

Java:
public class Link {

public int wert ;
public Link nächster;

public Link(int wert , Link nächster) {
this.wert=wert;
this.nächster=nächster;
}

}


public class Liste {

public Link anfang;
public Link ende;

public Liste(Link anfang) {
this.anfang = anfang;
this.ende = anfang;
}

public void add(Link neu) {

if (this.anfang == null) {
this.anfang = neu;
this.ende=neu;
} else {
this.ende.nächster = neu;
ende = ende.nächster;
}

}

public void iter() {
Link a = anfang;

while (a != null) {

System.out.print(a.wert + " ");

a = a.nächster;
}

}

public void anzEl() {
Link a = anfang;
int count = 0;

while (a != null) {

++count;
a = a.nächster;
}
System.out.println("Die liste besitzt " + count + " an Elementen");
}

public void fügeWertein(int value) {
Link neu = new Link(value,null);
Link a = anfang;

while(a.nächster!=null) {

if(a.wert==value) {
System.out.println("Wert schon vorhanden");
return;

}
a=a.nächster;
}
a.nächster=neu;

}





public boolean findWert(int wert) {

Link a = anfang;

while (a != null) {

if (a.wert == wert) {
return true;
}

a = a.nächster;

}
return false;

}

public void verketten(Liste neu) {

this.ende.nächster = neu.anfang;
this.ende = neu.ende;

}

public Liste kopieren(Liste alt) {
Link a = anfang;

Liste neu = new Liste(a);

while (a != null) {

System.out.print(a.wert + " ");
a = a.nächster;
}
return neu;

}

public void aaaad(Link neu) {

if (this.anfang == null) {
this.anfang = neu;
}
if (this.anfang != null) {
this.ende.nächster = neu;
this.ende = ende.nächster;
}
}

public void aaaaaaaaaaad(int wert) {
Link neu = new Link(wert, null);

if (this.anfang == null) {
this.anfang = neu;
} else {
this.ende.nächster = neu;
this.ende = ende.nächster;
}

}

public Liste coooopy() {
Link a = anfang;

Liste neu = new Liste(a);

while (a != null) {

System.out.print(a.wert + " ");
a = a.nächster;
}
return neu;

}
public void loescheWert(int wert) {

Link a = anfang ;

while(a.nächster!=null ) {

if(a.wert==wert) {
try {
a.nächster=a.nächster.nächster;


}
catch(Exception e) {
a.nächster=null;
ende=a;
}
}
a=a.nächster;
}
}

public void aaaaaaaaddd(int wert) {
Link neu = new Link(wert,null);

if(this.anfang==null) {
this.anfang=neu;
this.ende=neu;
}
else {
this.ende.nächster=neu;
this.ende=this.ende.nächster;


}
}
public void verkeeeetten(Liste neu) {

if(this.anfang==null) {
this.anfang=neu.anfang;
}
else {
this.ende.nächster=neu.anfang;
this.ende=neu.ende;

System.out.print(this.ende.nächster.wert + " ");
System.out.print(this.ende.wert+ " ");

neu.anfang=null;
neu.ende=null;




}



}

}

public class Main {

public static void main(String[] args) {
Link eins = new Link(1, null);
Link zwei = new Link(2, null);
Link drei = new Link(1, null);

Link a = new Link(100, null);
Link b = new Link(12, null);
Link c = new Link(3, null);

Liste list = new Liste(eins);
Liste list2 = new Liste(a);

list.add(eins);
list.add(zwei);
list.add(drei);
list.aaaad(c);
// list.aaaaaaaaaaad(999);

list2.add(b);
list2.add(c);

list.iter();
System.out.println();

// list.fügeWertein(2);
// list.fügeWertein(100);
// System.out.println();
//// System.out.println(list.findWert(2));
// list.verketten(list2);
list.iter();
// System.out.println( list2.kopieren(list)
// list.iter();
// list.coooopy();
// list.loescheWert(2);
// list.iter();
list.verkeeeetten(list2);
list.iter();



}

}
danke für die Anmerkung , kannst du mir vlt weiterhelfen?
 
L

LimDul

Du fügst c sowohl der list, also auch der list2 hinzu - das geht schief, weil dann c in beiden drin ist und damit deine Verkette Liste kaputt geht.
 
J

JustNobody

liegt es nur daran ?
Ja, denn du hast dann ja mehrere Elemente, die auf die 3 verweisen. Das ist noch ok, so lange die 3 das letzte Elemente ist.

Du hast dann die zwei Listen:
1 2 1 3
100 12 3

Aber nun fügst Du die aneinander. Das machst Du auch soweit korrekt, aber da ein Element in beiden Listen enthalten ist, hast Du dann einen Verweis vom letzten Element 3 auf das Element 100.

Diese Problematik kann entstehen, da Link nach außen sichtbar ist und benutzt wird. Bei so Klassen ist die Speicherung rein intern. Du fügst also nicht Link Elemente hinzu sondern nur Werte. Dann kannst Du ein Link Element nicht in mehrere Listen packen und du kannst die Struktur auch nicht von außen zerhauen. Das wäre also etwas, das man nach außen (aus gutem Grund) versteckt.
 
Thema: 

Lineare listen verkettung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben