2016-10-09 1 views
6

Это домашнее заданиеУдалить элемент с индексом N, LinkedList

меня попросили удалить элемент его из LinkedList. Я также получил его размер int N. Вопрос в том, как обновить размер моего списка после удаления узла в позиции «k»? Если что-то не так с логикой в ​​моем коде, укажите это.

Я не хочу, чтобы решение было просто руководством, спасибо.

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; 
} 

Я думаю, что я мог бы что-то сделать с размером списка (int N).

+0

Разве это не размер списка, который будет когда-либо один после удаления одного элемента? – qxz

+0

Кроме того, это односвязный или дважды связанный список? – qxz

+0

отдельно связанный список – Hello

ответ

2

При удалении узла, вам просто нужно изменить предыдущие Node «S next к (новый) следующий узлу к и уменьшает N (N--), чтобы обновить размер списка.

EDIT

Также следует обратить внимание на ваш цикл вы меняете следующий из всех узлов перед тем узлом k

0

Рассмотрим сделать два случая: к == 0 и остальные. Размер задается N поэтому новый размер должен быть 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

Попытка, используя метод list.remove(Object obj), определенный в LinkedList. Чтобы получить объект в k-м элементе, вы можете использовать list.get(int index). Когда вы найдете k-ый элемент, подумайте о том, чтобы сломать или вернуться, чтобы избежать проблем с одновременной модификацией или ошибок, связанных с индексом.

+0

OP пишет свою реализацию связанного списка _own_, не используя 'java.util.LinkedList'. Чтение всего вопроса до ответа всегда помогает. – qxz

 Смежные вопросы

  • Нет связанных вопросов^_^