Newer
Older
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
public class LinkedListPerso<T> implements Structure
{
private static class Maillon<T>
{
private T val; // valeur du maillon
private Maillon<T> suivant; // rfrence au maillon suivant
private Maillon() // pour crer la sentinelle
{
val = null;
suivant = this;
}
private Maillon(T x, Maillon<T> succ)
{
val = x;
suivant = succ;
}
} // class Maillon
private class Curseur
{
private int pos; // position courante dans la liste
private Maillon<T> maillon; // maillon courant pointe
private Curseur()
{
pos = -1;
maillon = LinkedListPerso.this.sentinelle;
}
private void positionner(int pos)
{
if (!( pos >= -1 && pos <= longueur()))
throw new IllegalStateException(
"mauvaise position pos = " + pos + " ");
if (pos < this.pos)
{
this.pos = -1;
maillon = sentinelle;
}
while (this.pos < pos)
{
this.pos++;
maillon = maillon.suivant;
}
}
} // class Curseur
private Maillon<T> sentinelle;
private Curseur curs; // curseur spcifique ListeChainee
private int nbVal;
public LinkedListPerso()
{
sentinelle = new Maillon<T>() ;
curs = this.new Curseur();
nbVal = 0;
}
public int longueur()
{
return nbVal;
}
public boolean estVide()
{
return nbVal == 0;
}
@Override
public T acces(int pos)
{
if (!(pos >= 0 && pos < nbVal))
throw new IndexOutOfBoundsException(
String.valueOf(pos));
curs.positionner(pos);
return curs.maillon.val;
}
public void remplacer(int pos, T x)
{
if (!(pos >= 0 && pos < nbVal))
throw new IndexOutOfBoundsException(
String.valueOf(pos));
curs.positionner(pos) ;
curs.maillon.val = x;
}
@Override
public void ajout(Object element, int position)
{
if (!(position >= 0 && position <= nbVal))
throw new IndexOutOfBoundsException(
String.valueOf(position));
curs.positionner(position - 1) ;
Maillon<T> pred = curs.maillon;
Maillon<T> succ = pred.suivant;
Maillon<T> nouveau = new Maillon<T>((T)element, succ);
pred.suivant = nouveau ;
nbVal++;
}
@Override
public void suppression(int pos)
{
if (!(pos >= 0 && pos < nbVal))
throw new IndexOutOfBoundsException(
String.valueOf(pos));
curs.positionner(pos - 1);
Maillon<T> pred = curs.maillon;
Maillon<T> aEnlever = pred.suivant;
Maillon<T> succ = aEnlever.suivant;
pred.suivant = succ;
nbVal--;
}
} // class ListeChainee