Class: DSA::LinkedList::Singly

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/dsa-ruby/linked_list.rb

Instance Method Summary collapse

Constructor Details

#initializeSingly

Returns a new instance of Singly.



23
24
25
26
# File 'lib/dsa-ruby/linked_list.rb', line 23

def initialize
  @head = nil
  @size = 0
end

Instance Method Details

#append(val) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/dsa-ruby/linked_list.rb', line 34

def append(val)
  new_node = Node.new(val)
  if @head.nil?
    @head = new_node
  else
    node = @head
    node = node.next while node.next
    node.next = new_node
  end
  @size += 1
  self
end

#delete(val) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/dsa-ruby/linked_list.rb', line 61

def delete(val)
  return false unless @head

  if @head.val == val
    @head = @head.next
    @size -= 1
    return true
  end

  node = @head
  while node.next
    if node.next.val == val
      node.next = node.next.next
      @size -= 1
      return true
    end
    node = node.next
  end

  false
end

#each(&block) ⇒ Object



127
128
129
130
131
132
133
134
# File 'lib/dsa-ruby/linked_list.rb', line 127

def each(&block)
  return enum_for(:each) unless block_given?
  node = @head
  while node
    yield node.val
    node = node.next
  end
end

#empty?Boolean

Returns:

  • (Boolean)


111
112
113
# File 'lib/dsa-ruby/linked_list.rb', line 111

def empty?
  @size == 0
end

#find(val) ⇒ Object



83
84
85
86
87
88
89
90
# File 'lib/dsa-ruby/linked_list.rb', line 83

def find(val)
  node = @head
  while node
    return node if node.val == val
    node = node.next
  end
  nil
end

#peekObject

Raises:

  • (IndexError)


56
57
58
59
# File 'lib/dsa-ruby/linked_list.rb', line 56

def peek
  raise IndexError, "list is empty" unless @head
  @head.val
end

#popObject

Raises:

  • (IndexError)


47
48
49
50
51
52
53
54
# File 'lib/dsa-ruby/linked_list.rb', line 47

def pop
  raise IndexError, "list is empty" unless @head

  val = @head.val
  @head = @head.next
  @size -= 1
  val
end

#push(val) ⇒ Object



28
29
30
31
32
# File 'lib/dsa-ruby/linked_list.rb', line 28

def push(val)
  @head = Node.new(val, @head)
  @size += 1
  self
end

#reverse!Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/dsa-ruby/linked_list.rb', line 92

def reverse!
  return self unless @head

  prev = nil
  curr = @head
  while curr
    nxt = curr.next
    curr.next = prev
    prev = curr
    curr = nxt
  end
  @head = prev
  self
end

#sizeObject



107
108
109
# File 'lib/dsa-ruby/linked_list.rb', line 107

def size
  @size
end

#to_aObject



115
116
117
118
119
120
121
122
123
# File 'lib/dsa-ruby/linked_list.rb', line 115

def to_a
  result = []
  node = @head
  while node
    result << node.val
    node = node.next
  end
  result
end