Skip to main content

construct a linked list from 2d matrix in golang

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

package main
import "fmt"
// Go program for
// Construct a linked list from 2D matrix
type LinkNode struct {
	data int
	next * LinkNode
	down * LinkNode
}
func getLinkNode(data int) * LinkNode {
	// return new LinkNode
	return &LinkNode {data,nil,nil}
}
type DoublyLinkedList struct {
	head * LinkNode
}
func getDoublyLinkedList() * DoublyLinkedList {
	// return new DoublyLinkedList
	return &DoublyLinkedList {nil}
}
func(this DoublyLinkedList) display() {
	if this.head == nil {
		fmt.Print("Empty linked list")
	} else {
		var front * LinkNode = this.head
		var right * LinkNode = nil
		for (front != nil) {
			right = front
			for (right != nil) {
				fmt.Print(right.data, "  ")
				right = right.next
			}
			fmt.Print("\n")
			// Visit to down node
			front = front.down
		}
	}
}
func(this *DoublyLinkedList) insertData(matrix[][] int, 
	rows int, cols int) {
	// Some auxiliary variables
	var levelHead * LinkNode = nil
	var root * LinkNode = nil
	var perv * LinkNode = nil
	var i int = 0
	var j int = 0
	// Add first row elements into result list 
	for (i < cols) {
		if this.head == nil {
			// Add first node
			this.head = getLinkNode(matrix[0][i])
			levelHead = this.head
		} else {
			// next head
			levelHead.next = getLinkNode(matrix[0][i])
			levelHead = levelHead.next
		}
		i++
	}
	// Get first element    
	levelHead = this.head
	i = 1
	// Add all the bottom element of each column
	for (i < rows) {
		root = nil
		perv = root
		for (j < cols) {
			levelHead.down = getLinkNode(matrix[i][j])
			if root == nil {
				root = levelHead.down
				perv = root
			} else {
				perv.next = levelHead.down
				perv = levelHead.down
			}
			levelHead = levelHead.next
			j++
		}
		levelHead = root
		// reset col
		j = 0
		// change row
		i++
	}
}
func main() {
	var dll * DoublyLinkedList = getDoublyLinkedList()
	// Create 2D metrix
	var matrix = [][] int {
		{ 1, 6, 9, 2,  -9 },
    	{ 2, 5, -5, 7, 1 },
    	{ 3,  4, 1, 8, 2 }};
	var rows int = len(matrix)
	var cols int = len(matrix[0])
	dll.insertData(matrix, rows, cols)
	dll.display()
}

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