Commit | Line | Data |
---|---|---|
54d3f5b3 | 1 | |
78c725c5 JB |
2 | @ClassPreamble ( |
3 | author = "Jérôme Benoit", | |
4 | date = "05/12/2011" | |
5 | ) | |
54d3f5b3 | 6 | public class Liste extends Structure { |
4d9f4a58 | 7 | private Node<Integer> headNode; |
54d3f5b3 JB |
8 | private int list_counter; |
9 | ||
10 | Liste() { | |
11 | setHeadNode(null); | |
12 | setSize(0); | |
13 | } | |
14 | ||
15 | private boolean isEmpty() | |
16 | { | |
17 | return getHeadNode() == null; | |
18 | } | |
19 | ||
20 | public int getSize() { | |
21 | return list_counter; | |
22 | } | |
23 | ||
24 | public void setSize(int size) { | |
25 | list_counter = size; | |
26 | } | |
27 | ||
4d9f4a58 | 28 | public void setHeadNode(Node<Integer> node) { |
54d3f5b3 JB |
29 | headNode = node; |
30 | } | |
31 | ||
4d9f4a58 | 32 | public Node<Integer> getHeadNode() { |
54d3f5b3 JB |
33 | return headNode; |
34 | } | |
35 | ||
36 | public boolean inserer(int value) { | |
37 | boolean found = false; | |
38 | if (isEmpty()) { | |
4d9f4a58 | 39 | headNode = new Node<Integer>(value); |
54d3f5b3 JB |
40 | list_counter++; |
41 | return true; | |
42 | } else if (value == headNode.getData()) { | |
43 | found = true; | |
44 | return true; | |
45 | } else { | |
4d9f4a58 | 46 | Node<Integer> nodeCursorNext = headNode.getNext(); |
54d3f5b3 JB |
47 | while (nodeCursorNext != null) { |
48 | if (value == nodeCursorNext.getData()) { | |
49 | found = true; | |
50 | break; | |
51 | } else { | |
52 | nodeCursorNext = nodeCursorNext.getNext(); | |
53 | } | |
54 | } | |
55 | if (!found) { | |
4d9f4a58 | 56 | headNode = new Node<Integer>(value, headNode); |
54d3f5b3 JB |
57 | list_counter++; |
58 | } | |
59 | // Insertion in a linked list can't fail | |
60 | return true; | |
61 | } | |
62 | } | |
63 | ||
64 | public boolean supprimer(int value) { | |
65 | boolean deleted = false; | |
66 | if (isEmpty()) { | |
67 | return deleted; | |
68 | } else if (value == headNode.getData()) { | |
69 | headNode = headNode.getNext(); | |
70 | deleted = true; | |
71 | list_counter--; | |
72 | } else { | |
4d9f4a58 JB |
73 | Node<Integer> nodeCursor = headNode; |
74 | Node<Integer> nodeCursorNext = headNode.getNext(); | |
54d3f5b3 JB |
75 | while (nodeCursorNext != null) { |
76 | if (value == nodeCursorNext.getData()) { | |
77 | nodeCursor.setNext(nodeCursorNext.getNext()); | |
78 | deleted = true; | |
79 | list_counter--; | |
80 | break; | |
81 | } else { | |
82 | nodeCursor = nodeCursorNext; | |
83 | nodeCursorNext = nodeCursorNext.getNext(); | |
84 | } | |
85 | } | |
86 | } | |
87 | return deleted; | |
88 | } | |
89 | ||
90 | public void afficher() { | |
c7c510eb | 91 | String className = this.getClass().getSimpleName(); |
5731ae5f | 92 | int i = 0; |
c7c510eb | 93 | System.out.println("---- " + className + " ----"); |
54d3f5b3 | 94 | if (isEmpty()) { |
c7c510eb | 95 | return; |
54d3f5b3 | 96 | } else if (headNode.getNext() == null) { |
5731ae5f | 97 | System.out.println("element " + i + " : " + headNode.getData()); |
54d3f5b3 | 98 | } else { |
4d9f4a58 | 99 | Node<Integer> nodeCursorNext = headNode.getNext(); |
5731ae5f JB |
100 | System.out.println("element " + i + " : " + headNode.getData()); |
101 | i++; | |
102 | while (nodeCursorNext != null) { | |
103 | System.out.println("element " + i + " : " + nodeCursorNext.getData()); | |
104 | nodeCursorNext = nodeCursorNext.getNext(); | |
54d3f5b3 JB |
105 | i++; |
106 | } | |
54d3f5b3 JB |
107 | } |
108 | } | |
109 | ||
97929775 | 110 | public void compacter(int nElements) { |
5731ae5f | 111 | // Remove the first nElements |
dbd5b977 | 112 | if (isEmpty() || nElements == 0) { |
5731ae5f | 113 | return; |
22758baf | 114 | } else if (headNode != null && headNode.getNext() == null) { |
5731ae5f JB |
115 | headNode = null; |
116 | } else { | |
117 | // We have at least 2 nodes in the linked list | |
4d9f4a58 | 118 | Node<Integer> nodeCursor = headNode; |
5731ae5f | 119 | int i = 0; |
22758baf | 120 | // Go to the node at the nElements place |
39d73320 | 121 | while (i < nElements - 1 && nodeCursor.getNext() != null && nElements > 1) { |
5731ae5f JB |
122 | nodeCursor = nodeCursor.getNext(); |
123 | i++; | |
124 | } | |
125 | // Set the nElements + 1 node as the root node | |
22758baf JB |
126 | // It might be null |
127 | setHeadNode(nodeCursor.getNext()); | |
5731ae5f | 128 | } |
97929775 JB |
129 | } |
130 | ||
54d3f5b3 | 131 | } |