Ich habe zwei Klassen, DataStructure sowie LinkedList. Meine DataStructure-Klasse ist für das Einfügen/Löschen/Ersetzen/Aktualisieren/Anzeigen der verknüpften Liste verantwortlich. Ich habe Probleme mit dem Einfügen eines Elements in die verknüpfte Liste vor dem indizierten Element. Wenn ich den Code debugge und die LinkedList-Klasse anschaue, ist es offensichtlich, dass die Verbindung unterbrochen und nicht kontinuierlich ist. Ich bin mir nicht sicher, was im Code falsch ist, da alles logisch klingt. Wenn sich jemand das ansehen und mich in die richtige Richtung lenken könnte, würde ich es sehr schätzen. DieseSinglelinked List Insertion vor Index
ist nur ein Ausschnitt des gesamten Projekts, so fühlen sich frei, um die Art zu ändern
Datastructure Klasse:
public class DataStructure {
//Item LinkedList field
private LinkedList<Item> itemLinkedList;
//Constructor
public DataStructure() {
itemLinkedList = new LinkedList<>();
}
//Add Item
public boolean addItem(Item item) {
boolean returnVal = false;
if (item != null) {
itemLinkedList.Move(2);
itemLinkedList.Add(item);
returnVal = true;
}
return returnVal;
}
}
LinkedList Klasse
public class LinkedList<T> {
//Fields
private Node<T> Head;
private Node<T> Current;
private Node<T> Tail;
private int size;
//Constructor
public LinkedList() {
}
//Methods
private void AddHead(T data) {
Node<T> temp = new Node<>(data);
Tail = Current = Head = temp;
}
public void Add(T data) {
if (data == null) throw new NullPointerException();
else {
Node<T> temp = new Node<>(data);
if (Head == null) AddHead(data);
else {
if (Current == Tail) {
Tail.setNext(temp);
Current = Tail = temp;
} else if (Current == Head) {
temp.setNext(Head);
Current = Head = temp;
} else {
Node<T> cu = Current;
Current = temp;
Current.setNext(cu);
}
}
size++;
}
}
public Node MoveNext() {
if (Current.getNext() != null)
return Current = Current.Next;
else return Current;
}
public void MoveLast() {
if (Tail != null)
Current = Tail;
}
public void MoveFirst() {
if (Head != null)
Current = Head;
}
public void Move(int index) {
if (index >= size) MoveLast();
else {
MoveFirst();
for (int i = 0; i < index; i++) MoveNext();
}
}
class Node<T> {
private T data;
private Node<T> Next;
public Node(T data, Node<T> next) {
this.data = data;
this.Next = next;
}
public Node(T data) {
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Node<T> getNext() {
return Next;
}
public void setNext(Node<T> next) {
Next = next;
}
public boolean hasNext() {
return Next != null;
}
}
}
Was Schwanz-Tracking ist? Was meinst du mit "indexiertes Element"? – CrazyJavaLearner
@Dharani Schwanz verfolgt das letzte Element in der Liste. Ich habe das "indizierte Element" wahrscheinlich falsch formuliert. Das Element am spezifischen Index der verknüpften Liste. –