Skip to content

Commit 9416e43

Browse files
committed
Avoid warning for unused code & enhance cleanliness in double link list
1 parent 130f43e commit 9416e43

File tree

2 files changed

+7
-55
lines changed

2 files changed

+7
-55
lines changed

lib/data_structures/doubly_linked_list.ex

+7-37
Original file line numberDiff line numberDiff line change
@@ -11,55 +11,25 @@ defmodule Algorithms.DataStructures.DoublyLinkedList do
1111
defmodule LinkedList, do: defstruct([:size, :head, :tail])
1212

1313
def get_node(%LinkedList{size: 0}, _value), do: nil
14+
def get_node(%LinkedList{head: head}, value), do: check_node(head, value)
1415

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)
2019

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
3120

3221
def add_to_head(%LinkedList{head: nil, tail: nil, size: 0}, value) do
3322
new_node = %Node{value: value, prev: nil, next: nil}
3423
%LinkedList{head: new_node, tail: new_node, size: 1}
3524
end
3625

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
3827
new_head = %Node{prev: nil, next: old_head}
39-
old_head = %Node{prev: new_head, next: old_head.next}
28+
4029
%LinkedList{size: size + 1, tail: tail, head: new_head}
4130
end
4231

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
4633
%LinkedList{size: size + 1, tail: old_tail, head: head}
4734
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
6535
end

test/data_structures/doubly_linked_list_test.exs

-18
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,5 @@ defmodule Algorithms.DataStructures.DoublyLinkedListTest do
2020
assert res.head == %Node{value: 1, prev: nil, next: nil}
2121
assert res.tail == %Node{value: 1, prev: nil, next: nil}
2222
end
23-
24-
test "it works when the list is not empty" do
25-
# res =
26-
# DoublyLinkedList.add_to_head(%LinkedList{head: nil, tail: nil, size: 0}, 10)
27-
# |> DoublyLinkedList.add_to_head(3)
28-
# |> DoublyLinkedList.add_to_head(5)
29-
# |> DoublyLinkedList.add_to_head(-1)
30-
#
31-
# assert head = res.head
32-
# assert head.prev == nil
33-
# assert head.value == 10
34-
# assert head.next.value == 3
35-
#
36-
# assert tail = res.tail
37-
# assert tail.prev.value == 5
38-
# assert tail.value == -1
39-
# assert tail.next == nil
40-
end
4123
end
4224
end

0 commit comments

Comments
 (0)