Skip to main content

construct a linked list from 2d matrix in ruby

Ruby program for construct a linked list from 2d matrix. Here problem description and explanation.

#  Ruby program for
#  Construct a linked list from 2D matrix
class LinkNode 
	# Define the accessor and reader of class LinkNode
	attr_reader :data, :next, :down
	attr_accessor :data, :next, :down
	def initialize(data) 
		self.data = data
		self.next = nil
		self.down = nil
	end

end

class DoublyLinkedList 
	# Define the accessor and reader of class DoublyLinkedList
	attr_reader :head
	attr_accessor :head
	def initialize() 
		self.head = nil
	end

	def display() 
		if (self.head == nil) 
			print("Empty linked list")
		else
 
			front = self.head
			right = nil
			while (front != nil) 
				right = front
				while (right != nil) 
					print(right.data ,"  ")
					right = right.next
				end

				print("\n")
				#  Visit to down node
				front = front.down
			end

		end

	end

	def insertData(matrix, rows, cols) 
		#  Some auxiliary variables
		levelHead = nil
		root = nil
		perv = nil
		i = 0
		j = 0
		#  Add first row elements into result list 
		while (i < cols) 
			if (self.head == nil) 
				#  Add first node
				self.head = LinkNode.new(matrix[0][i])
				levelHead = self.head
			else
				#  next head
				levelHead.next = LinkNode.new(matrix[0][i])
				levelHead = levelHead.next
			end
			i += 1
		end

		#  Get first element    
		levelHead = self.head
		i = 1
		#  Add all the bottom element of each column
		while (i < rows) 
			root = nil
			perv = root
			while (j < cols) 
				levelHead.down = LinkNode.new(matrix[i][j])
				if (root == nil) 
					root = levelHead.down
					perv = root
				else
 
					perv.next = levelHead.down
					perv = levelHead.down
				end

				levelHead = levelHead.next
				j += 1
			end

			levelHead = root
			#  reset col
			j = 0
			#  change row
			i += 1
		end

	end

end

def main() 
	dll = DoublyLinkedList.new()
	#  Create 2D metrix
	matrix = [
		[1, 6, 9, 2, -9],
		[2, 5, -5, 7, 1],
		[3, 4, 1, 8, 2]
	]
	rows = matrix.length
	cols = matrix[0].length
	dll.insertData(matrix, rows, cols)
	dll.display()
end

main()

Output

1  6  9  2  -9  
2  5  -5  7  1  
3  4  1  8  2  




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