I had an exercise to create two methods for simple queue class, first to delete last element and second to delete element at k position. Particularly I'm not asking for better implementation. Is it good enough and elegant ? What I should change ? I'll post only mentioned methods, rest should be simple enough.
/**
* Deletes node at position k.
*/
public void delete(int k) {
if (k > N || isEmpty()) throw new NoSuchElementException("Cannot delete element at position: " + k);
Node previous = first;
int deleteIndex = 1;
if(k == deleteIndex){ //special case for first element
if(first.next == null)
last = null;
first = first.next;
N--;
return;
}
for (Node node = first; node != null; node = node.next, deleteIndex++) {
if (k == deleteIndex) {
previous.next = node.next;
if (previous.next == null) last = previous; //if deleted element was the last one
N--;
return;
}
previous = node;
}
}
/**
* Deletes last node from the queue.
*/
public void removeLastNode() {
if(isEmpty()) throw new NoSuchElementException("Cannot delete last element from queue");
if (N == 1) { //special case for only one element in queue
first = null;
last = null;
N--;
return;
}
Node previous = null;
for (Node node = first; node != null; node = node.next) {
if (node.next == null) {
previous.next = null;
last = previous;
N--;
}
previous = node;
}
}