Skip to main content

Segregate even and odd nodes in sorted order in ruby

Ruby program for Segregate even and odd nodes in sorted order. Here more information.

#  Ruby program for
#  Segregate even and odd nodes in ascending order

#  Linked list node
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 SingleLL 
	# Define the accessor and reader of class SingleLL
	attr_reader :head
	attr_accessor :head
	def initialize() 
		self.head = nil
	end

	#  Add new node at the end of linked list
	def insert(value) 
		#  Create  node
		node = LinkNode.new(value)
		if (self.head == nil) 
			self.head = node
		else
 
			temp = self.head
			#  Find last node
			while (temp.next != nil) 
				#  Visit to next node
				temp = temp.next
			end

			#  Add node at last position
			temp.next = node
		end

	end

	#  Display all Linked List elements
	def display() 
		if (self.head != nil) 
			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 sortedAdd(element) 
		if (self.head == nil) 
			self.head = element
		elsif(self.head.data >= element.data) 
			element.next = self.head
			self.head = element
		else
 
			temp = self.head
			#  Finding location of inserting node
			while (temp.next != nil && 
                   temp.next.data < element.data) 
				#  Visit to next node
				temp = temp.next
			end

			#  Add node 
			element.next = temp.next
			temp.next = element
		end

	end

	def segregateNode(odd, even) 
		node = nil
		#  Iterating the linked list node
		while (self.head != nil) 
			node = self.head
			#  Visit to next node
			self.head = node.next
			#  Set null to next node
			node.next = nil
			if (node.data % 2 == 0) 
				#  When node value is Even
				even.sortedAdd(node)
			else
 
				#  When node value is Odd
				odd.sortedAdd(node)
			end

		end

	end

end

def main() 
	#  Create linked lists
	sll = SingleLL.new()
	odd = SingleLL.new()
	even = SingleLL.new()
	#  Linked list sll
	#  4 → 3 → 5 → 2 → 11 → 1 → 6 → NULL
	sll.insert(4)
	sll.insert(3)
	sll.insert(5)
	sll.insert(2)
	sll.insert(11)
	sll.insert(1)
	sll.insert(6)
	print("Initial Element\n")
	#  Display all node
	sll.display()
	sll.segregateNode(odd, even)
	print("\nEven Element\n")
	#  Display all even node
	even.display()
	print("\nOdd Element\n")
	#  Display all odd node
	odd.display()
end

main()

Output

Initial Element
  4  3  5  2  11  1  6
Even Element
  2  4  6
Odd Element
  1  3  5  11




Comment

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