--- /dev/null
+
+
+public class Liste extends Structure {
+
+ private class IntNode {
+ private int data;
+ private IntNode next;
+
+ IntNode(int value) {
+ setData(value);
+ setNext(null);
+ }
+
+ IntNode(int value, IntNode nextNode) {
+ setData(value);
+ setNext(nextNode);
+ }
+
+ public int getData() {
+ return data;
+ }
+
+ public void setData(int value) {
+ data = value;
+ }
+
+ public IntNode getNext() {
+ return next;
+ }
+
+ public void setNext(IntNode nextNode) {
+ next = nextNode;
+ }
+
+ }
+
+ private IntNode headNode;
+ private int list_counter;
+
+ Liste() {
+ setHeadNode(null);
+ setSize(0);
+ }
+
+ private boolean isEmpty()
+ {
+ return getHeadNode() == null;
+ }
+
+ public int getSize() {
+ return list_counter;
+ }
+
+ public void setSize(int size) {
+ list_counter = size;
+ }
+
+ public void setHeadNode(IntNode node) {
+ headNode = node;
+ }
+
+ public IntNode getHeadNode() {
+ return headNode;
+ }
+
+ public boolean inserer(int value) {
+ boolean found = false;
+ if (isEmpty()) {
+ headNode = new IntNode(value);
+ list_counter++;
+ return true;
+ } else if (value == headNode.getData()) {
+ found = true;
+ return true;
+ } else {
+ IntNode nodeCursorNext = headNode.getNext();
+ while (nodeCursorNext != null) {
+ if (value == nodeCursorNext.getData()) {
+ found = true;
+ break;
+ } else {
+ nodeCursorNext = nodeCursorNext.getNext();
+ }
+ }
+ if (!found) {
+ headNode = new IntNode(value, headNode);
+ list_counter++;
+ }
+ // Insertion in a linked list can't fail
+ return true;
+ }
+ }
+
+ public boolean supprimer(int value) {
+ boolean deleted = false;
+ if (isEmpty()) {
+ return deleted;
+ } else if (value == headNode.getData()) {
+ headNode = headNode.getNext();
+ deleted = true;
+ list_counter--;
+ } else {
+ IntNode nodeCursor = headNode;
+ IntNode nodeCursorNext = headNode.getNext();
+ while (nodeCursorNext != null) {
+ if (value == nodeCursorNext.getData()) {
+ nodeCursor.setNext(nodeCursorNext.getNext());
+ deleted = true;
+ list_counter--;
+ break;
+ } else {
+ nodeCursor = nodeCursorNext;
+ nodeCursorNext = nodeCursorNext.getNext();
+ }
+ }
+ }
+ return deleted;
+ }
+
+ public void afficher() {
+ String className = this.getClass().getSimpleName();
+ int i = 0;
+ System.out.println("---- " + className + " ----");
+ if (isEmpty()) {
+ return;
+ } else if (headNode.getNext() == null) {
+ System.out.println("element " + i + " : " + headNode.getData());
+ } else {
+ IntNode nodeCursorNext = headNode.getNext();
+ System.out.println("element " + i + " : " + headNode.getData());
+ i++;
+ while (nodeCursorNext != null) {
+ System.out.println("element " + i + " : " + nodeCursorNext.getData());
+ nodeCursorNext = nodeCursorNext.getNext();
+ i++;
+ }
+ }
+ }
+
+ public void compacter(int nElements) {
+ // Remove the first nElements
+ if (isEmpty() || nElements == 0) {
+ return;
+ } else if (headNode != null && headNode.getNext() == null) {
+ headNode = null;
+ } else {
+ // We have at least 2 nodes in the linked list
+ IntNode nodeCursor = headNode;
+ int i = 0;
+ // Go to the node at the nElements place
+ while (i < nElements - 1 && nodeCursor.getNext() != null && nElements > 1) {
+ nodeCursor = nodeCursor.getNext();
+ i++;
+ }
+ // Set the nElements + 1 node as the root node
+ // It might be null
+ setHeadNode(nodeCursor.getNext());
+ }
+ }
+
+}