Een linked list is een opject dat een verwijzing heeft naar de eerste node van de lijst die het voorstelt. Elke node heeft een verwijzing naar de volgende node in de lijst. Handig voor een stack bijvoorbeeld.
Een doubly linked list is een linked list waar elke node een verwijzing naar de volgende EN vorrige node heeft. Je list object verwijst dus nog steeds naar de eerste node.
Een double ended list is een list object waar je naar zowel de eerste en de laatste node van de lijst een verwijzing bevat. Erg fijn voor een queue.
Hier kun je natuurlijk wanneer gewenst gesorteerde varianten van maken. Bij het inserten van een nieuwe waarde in de lijst begin je bij de eerste node op de lijst.
- Als de nieuwe waarde kleiner (of hoe je de lijst wilt sorteren) is zet je list.first in newNode.next waarna je list.first overschrijft met newNode. (mFore())
- Als de nieuwe waarde groter is loop je door de list tot het niet zo is en stop je de nieuwe tussen de twee nodes.
- Als de nieuwe waarde groter is dan elke andere waarde in je lijst voeg je een nieuwe node toe op het eind.
Het eerste wat mij opvalt is dat jij de node en list gecombineerd hebt. Het tweede is dat je variabele geen beschrijvende naam geeft. (Of ik ken C# conventies niet.)
Als je een gesorteerde list wilt hebben, dan wil je niet dat programmeurs zelf methods als mFore() mTween() en mHind() aan kunnen roepen. Of toegang hebben tot pL en pR. Al snap ik dat je nu alleen wilt leren hoe het werkt.
Je kunt hier een voorbeeldje aan nemen
1
2
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
|
class LinkedList {
public Node first = null;
public void insert(int value) { Node newNode = new Node(value);
if (first == null) { first = newNode; return; }
newNode.next = first; first = newNode; } }
class SortedLinkedList : LinkedList {
public void insert(int value) { if (first == null || value < first.value) { return base.insert(value); }
Node newNode = new Node(value); Node current = first;
while (current.next != null) { if (value < current.next.value) { newNode.next = current.next; current.next = newNode; return; }
current = current.next; }
current.next = newNode; } }
class Node {
public int value; public Node next = null;
public Node(int v) { value = v; } }
|
|
|
Ps. ik ben onder andere bekend met JAVA, PHP en C niet met C# al heb ik wel snel wat dingen opgezocht. Ik ga niet garanderen dat er geen fouten in zitten en het gaat ook vooral om het idee.