O listă simplu-înlănțuită cu proprietăți de dublu-înlănțuită, care are nevoie de un singur pointer în loc de doi.
Sună frumos în teorie, dar este inaplicabil în Java. De fapt, este o aplicație pur teoretică întrucât memoria nu mai este o problemă acum, fiind foarte ieftină. De asemenea, nu te scutește de parcurgerea întregii liste, la fel ca listele simplu-înlănțuite. Pe scurt, brain fuck for no reason, mai jos este o tentativă de implementare (netestată, pentru că... Java):
Notă: getPrev și getNext au nevoie de nodul următor respectiv anterior pentru a-și îndeplini funcția, ceea ce presupune că ai parcurs lista înainte. Doar oleacă mai flexibil, merită oare? Sau îmi scapă ceva?
public class MemEffLinkdListTest {
Node head;
/* Xor Linked List */
private void initList(int length) {
if (length < 1) {
throw new MyBusinessException("Invalid length!");
}
head = new Node("A0");
Node prev = null;
Node current = head;
for (int i = 1; i < length; i++) {
Node next = new Node("A" + i);
Node ptr = prev ^ next; // not possible in Java, we don't have access to memory addresses
current.setPtr(ptr);
prev = current;
current = next;
}
}
private Node getNext(Node current, Node prev) {
return current ^ prev; // not possible in Java
}
private Node getPrev(Node current, Node next) {
return current ^ next; // not possible in Java
}
private class Node {
private String data;
private Node ptr;
public Node(String data) {
this.data = data;
this.ptr = null;
}
public void setPtr(Node ptr) {
this.ptr = ptr;
}
public Node getPtr() {
return ptr;
}
public String getData() {
return data;
}
}
}
Niciun comentariu:
Trimiteți un comentariu