Сортированный круговой связанный список не обновляется после удаления элемента?
Я реализую отсортированный круговой связанный список, сначала заполнив список отсортированными элементами, а также реализовал функции вставки и удаления в него. Однако при вызове delete это не обновляет список. Я попытался отладить код в методе удаления, но пока безуспешно. ниже приведен фрагмент кода моей программы.
class CNode {
public int data;
public CNode next;
public CNode() {
this.data = 0;
this.next = null;
}
public CNode(int data, CNode next) {
this.data = data;
this.next = next;
}
public CNode(int data) {
this.data = data;
this.next = null;
}
}
И класс водителя -
public class SortedCLL {
public static CNode head = new CNode();
public static CNode last = new CNode();
public static int NoN;
public SortedCLL() {
int N = 3;
int val[] = {4, 2, 6};
Arrays.sort(val);
CNode first = new CNode(val[0]);
head.next = first;
last.next = first;
NoN++;
for (int i = 1; i < N; i++) {
CNode n = new CNode(val[i]);
last.next.next = n;
last.next = n;
n.next = head.next;
NoN++;
}
//DELETING AN ELEMENT
delete(2);
//INSERTING AN ELEMENT
insert(7);
CNode check = head.next;
for (int i = 0; i < NoN; i++) {
System.out.print(check.data + " ");
check = check.next;
}
}
public static void main(String args[]) throws Exception {
new SortedCLL();
}
private void insert(int element) {
CNode n = new CNode(element);
if(element < head.next.data) {
n.next = head.next;
head.next = n;
last.next.next = n;
NoN++;
return;
}
int nodes = NoN - 1;
CNode iter = head;
while(nodes-- > 0){
if(iter.data < element && iter.next.data > element) {
n.next = iter.next;
iter.next = n;
NoN++;
return;
}
}
last.next.next = n;
last.next = n;
n.next = head.next;
NoN++;
return;
}
private void delete(int element) {
//System.out.println( " : " +element);
CNode prev = last.next;
CNode iter = head.next;
int nodes = NoN;
while(nodes-- > 0) {
if(iter.data == element) {
//HERE IT IS PRINTING CORRECT PREV AND NEXT NODE'S DATA.
System.out.println( prev.data + " : " +iter.next.data);
prev.next = iter.next;
NoN--;
return;
}
prev = iter;
iter = iter.next;
}
return;
}
}
Проверьте оператор отладки в классе SortedCLL, в методе delete он печатает правильные значения prev и next, но результат не соответствует ожидаемому.
expected list
4 6 7
program's list
2 4 6 7
Любая помощь приветствуется!
1 ответ
Решение
Вы забываете крайний случай удаления заголовка списка, который требует выполнения head = head.next;
на удаление.
Кроме того, вы нигде не занимаетесь пустым списком, так что следите за этим!