Я хочу создать разреженную матрицу, используя связанные списки в java. Узел сортируется на основе индекса строки и столбца. Мне удалось создать разреженный вектор, но по какой-то причине я не могу понять, как это сделать, используя два индекса.
Конструктор
public LLSparseM(int nr, int nc) {
numeberOfColums = nc;
numerOfRows = nr;
head = new node(-1, -1, 0, null, null);
tail = new node(nr, nc, 0, head, null);
head.setNext(tail);
return;
}
Метод заданного элемента
public void setElement(int ridx, int cidx, int val) {
if (head.getNext().getElement() == 0) {
node newnode = new node(ridx, cidx, val, head, tail);
head.setNext(newnode);
tail.setPrev(newnode);
} else {
node current = head.getNext();
while (current.getRidx() < ridx || (current.getRidx() <= ridx && current.getCidx() < cidx)) {
current = current.getNext();
}
if (current.getRidx() == ridx && current.getCidx() == cidx) {
node newest = new node(ridx, cidx, val, current.getPrev(), current.getNext());
current.getPrev().setNext(newest);
current.getNext().setPrev(newest);
} else if (current.getRidx() > ridx || current.getRidx() >= ridx && current.getCidx() > current.getCidx()) {
if (head.getRidx() > ridx || head.getRidx() == ridx && head.getCidx() > cidx) {
node newest = new node(ridx, cidx, val, null, head);
tail = head;
head.setPrev(newest);
head = newest;
tail.setNext(null);
} else {
node temp = current.getPrev();
node newest = new node(ridx, cidx, val, temp, current);
temp.setNext(newest);
current.setPrev(newest);
}
} else if (current.getRidx() == numerOfRows && current.getCidx() == numeberOfColums) {
node newest = new node(ridx, cidx, val, tail.getPrev(), tail);
tail.getPrev().setNext(newest);
}
}
}