Odbieram struktury danych, czytając książkę, a jedno z pytań, które prosi, to zbudować okrągłą listę z pojedynczym połączeniem, nie używając "pierwszych" wskaźników "pierwszych" &, ale raczej zezwalających na dostęp do niego za pomocą jednego odniesienia "bieżący". Nie jestem pewien, czy rozumiem to pytanie, zawsze uważałem, że potrzebuję przynajmniej pierwszego lub ostatniego. Oto moja implementacja, ale ma "pierwszy", nie wiem, jak sobie z tym poradzić. Czy możesz skomentować, w jaki sposób mogę dostosować mój kod, aby wyeliminować zależność od pierwszego?Circular LinkedList w Javie
class Link {
public int iData;
public Link next;
public Link(int id) { // constructor
iData = id;
}
public void displayLink() {
System.out.print(iData + " ");
}
} // end class Link
Wtedy oto lista sama:
public class CircularLinkedList {
private Link first;
private Link current;
public Link getCurrent(){
return current;
}
public void setCurrent(int data){
}
public void advance(){
current = current.next;
}
public void insert(int data) {
Link newLink = new Link(data);
if (first == null) {
first = current = newLink;
} else {
current.next = newLink;
}
current = newLink;
newLink.next = first;
}
...
}
A więc operacje takie jak insertAfter i DeleteAt będą wykonywane normalnie, zakładając, że masz odniesienie do pierwszego ("current"), czy bieżący musi być pierwszym węzłem, czy może być gdziekolwiek? – sam2015
To brzmi jak "prąd" może być wszędzie, ponieważ nie ma "pierwszego" węzła. Jeśli definicja danych wymagałaby określenia "pierwszego" węzła, nie byłoby właściwe stosowanie listy kołowej. Na liście połączonej koliście nie ma sensu używać indeksów do identyfikowania węzłów. Jeśli na przykład wywołasz "deleteAt (2)" - czyli 2 z którego miejsca? Co to jest zero? –
W przypadku listy z połączeniami kołowymi wszelkie metody wykonujące operacje na podstawie indeksu muszą używać indeksu względem "bieżącego" węzła. Jest tak, ponieważ jest to jedyny punkt wejścia do struktury danych. –