Remove duplicates from unsorted linked list in ruby
Ruby program for Remove duplicates from unsorted linked list. Here problem description and explanation.
# Ruby Program to
# Delete duplicate nodes in unsorted linked list
class LinkNode
# Define the accessor and reader of class LinkNode
attr_reader :data, :next
attr_accessor :data, :next
def initialize(data)
self.data = data
self.next = nil
end
end
class LinkedList
# Define the accessor and reader of class LinkedList
attr_reader :head, :tail
attr_accessor :head, :tail
# Class constructors
def initialize()
self.head = nil
self.tail = nil
end
# Insert new element at end position
def insert(value)
# Create new node
node = LinkNode.new(value)
if (self.head == nil)
# Add first node
self.head = node
else
# Add new node at the last position
self.tail.next = node
end
# Make new tail
self.tail = node
end
# Display all node value
def display()
if (self.head != nil)
print("Linked List Element :")
temp = self.head
while (temp != nil)
# Display node value
print(" ", temp.data)
# Visit to next node
temp = temp.next
end
else
print("Empty Linked list\n")
end
end
def removeNode()
if (self.head == nil)
# When linked list empty
print("Empty Linked list")
else
# Auxiliary variable
temp = self.head
hold = nil
initial = nil
current = nil
# Outer loop
while (temp != nil)
# New last node
self.tail = temp
current = temp
initial = current.next
# Inner loop
# Remove all node which value is similar to temp node
while (initial != nil)
if (temp.data == initial.data)
# Get remove node
hold = initial
else
current = initial
end
# Visit to next node
initial = initial.next
if (hold != nil)
current.next = initial
# remove node
hold = nil
end
end
# Visit to next node
temp = temp.next
end
end
end
end
def main()
# new linked list
task = LinkedList.new()
# Add tested element
task.insert(1)
task.insert(2)
task.insert(9)
task.insert(4)
task.insert(9)
task.insert(3)
task.insert(1)
task.insert(7)
task.insert(2)
task.insert(1)
print("\nBefore Delete ", "\n")
task.display()
task.removeNode()
print("\nAfter Delete ", "\n")
task.display()
end
main()
Output
Before Delete
Linked List Element : 1 2 9 4 9 3 1 7 2 1
After Delete
Linked List Element : 1 2 9 4 3 7
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment