2016-10-09 12 views
6

Jest to praca domowaUsuń element o indeksie N, LinkedList

Zostałem poproszony, aby usunąć element KTH z LinkedList. Dostałem również jego rozmiar: int N. Pytanie brzmi: jak zaktualizować rozmiar mojej listy po usunięciu węzła na pozycji "k"? Jeśli coś jest nie tak z logiką w moim kodzie, wspomnij o tym.

Nie chcę rozwiązania tylko wskazówek, dzięki.

int N;    
Node first;   

// delete the kth element (where k is between 0 and N-1 inclusive) 
public void delete (int k) { 
    if (k < 0 || k >= N) 
     throw new IllegalArgumentException(); 
    Node x = first; 
    if(k == 0){ 
     first = x.next; 
     N = N - 1; 
    } 
    for(int i = 1; i < k; i++){ 
     x = x.next; 
     N = N - 1; 
    } 
    x.next = x.next.next; 
    N = N - 2; 
} 

Myślę, że mogę zrobić coś złego z wielkością listy (int N).

+0

Czy rozmiar tej listy nie będzie mniejszy po usunięciu jednego elementu? – qxz

+0

Czy jest to lista pojedynczo połączona lub podwójnie powiązana? – qxz

+0

pojedynczo-połączona lista – Hello

Odpowiedz

2

Po usunięciu węzła, wystarczy zmienić dotychczasowe Node „s next do (nowej) następnego węzła w K i zmniejszyć N (N--) zaktualizowania wielkości listy.

EDIT

zwracać uwagę również na swój pętli zmieniasz następny wszystkich węzłów przed węzłem k

0

Rozważyć dwa przypadki: k == 0 i reszta. wielkość jest przez N, tak nowy rozmiar powinien być N - 1.

Node x = first; // What a name 
if (k == 0) { 
    first = x.next; // Could be first = first.next 
    N = N - 1; 
    // Are you done here? 
} 

for (int i = 1; i < k; i++) { 
    x = x.next; 
    // Really? N = N - 1; 
} 
x.next = x.next.next; 
// Really? N = N - 2; 
N = N - 1; 
0

Użyj metody list.remove(Object obj) zdefiniowane w LinkedList. Aby uzyskać obiekt w k-tym elemencie, możesz użyć list.get(int index). Po znalezieniu k-tego elementu należy rozważyć przerwanie lub powrót, aby uniknąć problemów związanych z jednoczesną modyfikacją lub błędami indeksowymi.

+0

Program OP pisze ich implementację listy powiązanej, nie używając 'java.util.LinkedList'. Przeczytanie całego pytania przed udzieleniem odpowiedzi zawsze pomaga. – qxz