-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist.rb
132 lines (116 loc) · 2.05 KB
/
list.rb
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
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#
# MyListEntry
#
# Link list
#
# Created 2012/NOV/25
# Go Hosohara [email protected]
#
class MyListEntry
attr_reader :data
attr_writer :data
attr_reader :next
attr_writer :next
attr_reader :prev
attr_writer :prev
# Previous link list entry
@prev = nil
# Next link list entry
@next = nil
# Data(Integer)
@data = nil
def initialize(data_info)
@data = data_info
end
# Append new_entry
def append(new_entry)
tmp_entry = nil
tmp_entry = self.next if self.next
self.next = new_entry
new_entry.prev = self
if tmp_entry
new_entry.next = tmp_entry
self.next.prev = new_entry
end
end
# Prepend new_entry
def prepend(new_entry)
tmp_entry = nil
tmp_entry = self.prev if self.prev
self.prev = new_entry
new_entry.next = self
if tmp_entry
new_entry.prev = tmp_entry
self.prev.next = new_entry
end
end
def delete
prev_list = self.prev
next_list = self.next
prev_list.next = next_list
next_list.prev = prev_list
end
end
#
#main
#
a = [1,2,3,4,5]
prev_entry = nil
top_entry = nil
first_flag = false
#
# Append test
#
a.each{|num|
link_entry = MyListEntry.new(num)
top_entry = link_entry unless first_flag
first_flag = true
if prev_entry
prev_entry.append(link_entry)
end
prev_entry = link_entry
}
entry = top_entry
puts "Append"
while(entry)
puts "Data = " + entry.data.to_s
entry = entry.next
end
#
# Prepend test
#
prev_entry = nil
a.each{|num|
link_entry = MyListEntry.new(num)
first_flag = true
if prev_entry
prev_entry.prepend(link_entry)
end
prev_entry = link_entry
}
entry = prev_entry
puts "Prepend"
while(entry)
puts "Data = " + entry.data.to_s
entry = entry.next
end
#
# Delete test
#
entry = top_entry
puts "Before Delete"
while(entry)
puts "Data = " + entry.data.to_s
entry = entry.next
end
entry = top_entry
entry = entry.next
entry = entry.next
puts "Delete entry 3"
entry.delete
entry = top_entry
puts "After Delete"
while(entry)
puts "Data = " + entry.data.to_s
entry = entry.next
end