@@ -11,55 +11,25 @@ defmodule Algorithms.DataStructures.DoublyLinkedList do
11
11
defmodule LinkedList , do: defstruct ( [ :size , :head , :tail ] )
12
12
13
13
def get_node ( % LinkedList { size: 0 } , _value ) , do: nil
14
+ def get_node ( % LinkedList { head: head } , value ) , do: check_node ( head , value )
14
15
15
- def get_node ( % LinkedList { size: _size , head: head , tail: _tail } , value ) do
16
- check_node ( head , value )
17
- end
18
-
19
- defp check_node ( % Node { value: value , next: nil } = node , _value ) , do: nil
16
+ defp check_node ( % Node { next: nil } , _value ) , do: nil
17
+ defp check_node ( % Node { value: value } = node , value ) , do: node
18
+ defp check_node ( % Node { next: next } , value ) , do: check_node ( next , value )
20
19
21
- defp check_node ( % Node { value: value , next: next } = node , value ) do
22
- if node . value == value do
23
- node
24
- else
25
- check_node ( node . next , value )
26
- end
27
- end
28
-
29
- def set_node ( list , value ) do
30
- end
31
20
32
21
def add_to_head ( % LinkedList { head: nil , tail: nil , size: 0 } , value ) do
33
22
new_node = % Node { value: value , prev: nil , next: nil }
34
23
% LinkedList { head: new_node , tail: new_node , size: 1 }
35
24
end
36
25
37
- def add_to_head ( % LinkedList { head: old_head , tail: tail , size: size } , value ) do
26
+ def add_to_head ( % LinkedList { head: old_head , tail: tail , size: size } , _value ) do
38
27
new_head = % Node { prev: nil , next: old_head }
39
- old_head = % Node { prev: new_head , next: old_head . next }
28
+
40
29
% LinkedList { size: size + 1 , tail: tail , head: new_head }
41
30
end
42
31
43
- def add_to_tail ( % LinkedList { head: head , tail: old_tail , size: size } , value ) do
44
- new_tail = % Node { prev: old_tail , next: nil }
45
- # old_tail.next = new_tail
32
+ def add_to_tail ( % LinkedList { head: head , tail: old_tail , size: size } , _value ) do
46
33
% LinkedList { size: size + 1 , tail: old_tail , head: head }
47
34
end
48
-
49
- defp remove ( % LinkedList { size: 0 } , value ) , do: nil
50
-
51
- defp remove ( % LinkedList { size: size , head: head , tail: tail } = list , value ) do
52
- node_to_remove =
53
- case get_node ( list , value ) do
54
- nil -> raise "No node"
55
- node -> node
56
- end
57
-
58
- # in elixir need to actually update references, this won't work in functional programming.
59
- # previous = node_to_remove.prev
60
- # next = node_to_remove.next
61
- # previous.next = next
62
- # next.previous = previous
63
- % LinkedList { size: size - 1 , head: head , tail: tail }
64
- end
65
35
end
0 commit comments