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
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