Das Problem ist mit meiner findA-Methode in der DLinkedList-Klasse. Verfahren offenbar meine head.next wechselt Punkt tmp.next ich eine Liste erstellt {0,1,2,3,4,5,6,7,8,9} benutzte ichDoubly Linked List - Kopf ändert sich, ohne dass ich ihn ändere
Finda (9)
und meine Liste wird bis {9} schrumpft nach unten, obwohl Funktionen richtiges Ergebnis gibt, ob den angegebenen Wert in meiner Liste ist oder nicht (wahr oder falsch)
auf der anderen Seite, Meine Finde Methode funktioniert perfekt und der einzige Unterschied zwischen den beiden ist, dass ich Knoten tmp = head in findA a nd-Knoten tmp = head.next in find
Unten ist das vollständige Code-Snippet. Ich weiß, dass einige Implementierungen ziemlich unprofessionell sind. Eventuelle Stellungnahmen das würde
public class Node <T extends Comparable<T>> {
T data;
Node prev;
Node next;
Node(){
}
Node(T val){
data = val;
} }
public class DLinkedList<T extends Comparable<T>> {
Node head;
Node tail;
DLinkedList(){
head = new Node();
tail = new Node();
tail.prev = head;
}
void insertInOrder(T value){
Node insert = new Node(value);
if(head.next==null){
head.next = insert;
insert.prev = head;
insert.next = tail;
tail.prev = insert;
}
else{
insert.prev = tail.prev;
tail.prev.next = insert;
tail.prev = insert;
insert.next = tail;
}
}
boolean find (T value){
boolean result = false;
Node tmp = head.next;
if (head!=null){
while(tmp!=null){
if(tmp.data.compareTo(value)!=0){
tmp = tmp.next;
}
else{
result = true;
break;
}
}
}
return result;
}
boolean findA (T value){
boolean result = false;
Node tmp = head;
if (head!=null){
while(tmp.next!=null){
if(tmp.next.data.compareTo(value)!=0){
tmp.next = tmp.next.next;
}
else{
result = true;
break;
}
}
}
return result;
}
void deleteA(T value){
Node tmp = head.next;
while(tmp.data.compareTo(value)!=0){
tmp = tmp.next;
}
if(tmp!=tail){
if(tmp==head.next)
head = tmp.next;
else
tmp.prev.next = tmp.next;
if (tmp==tail)
tail = tmp.prev;
else
tmp.next.prev = tmp.prev;
}
}
void delete(T value){
Node tmp = head.next;
if(find(value)){
while(tmp!=tail){
if(tmp.data.compareTo(value)!=0){
tmp = tmp.next;
}
else{
tmp.prev.next = tmp.next;
tmp.next.prev = tmp.prev;
break;
}
}
}
}
@Override
public String toString(){
Node tmp = head.next;
String result = "";
while(tmp!=tail){
System.out.println(tmp.data);
tmp = tmp.next;
}
return result;
} }
public class ListCheck {
public static void main(String[] args) {
DLinkedList list = new DLinkedList();
DLinkedList listA = new DLinkedList();
for(int i=0; i<10; i++){
list.insertInOrder(i);
listA.insertInOrder(i);
}
System.out.println(listA.findA(9));
System.out.println(list.find(9));
listA.toString();
System.out.println("");
list.toString();
} }
Warum ändern Sie 'tmp.next' statt' tmp'? Auch wen kümmert es, wenn Kopf ist Null oder "tmp" ist "Schwanz". Einfach vom Kopf bis zum Nullpunkt wechseln. – CollinD
@CollinD weil ich meine tmp als Kopf initiierte, und mein Kopf speichert keine Daten nach Design – hsnsd
Ja, und die Änderung 'tmp.next' ändert' head.next', da 'next' eine Referenz ist. – CollinD