construct a linked list from 2d matrix in swift
Swift program for construct a linked list from 2d matrix. Here problem description and other solutions.
import Foundation
// Swift 4 program for
// Construct a linked list from 2D matrix
class LinkNode
{
var data: Int;
var next: LinkNode? ;
var down: LinkNode? ;
init(_ data: Int)
{
self.data = data;
self.next = nil;
self.down = nil;
}
}
class DoublyLinkedList
{
var head: LinkNode? ;
init()
{
self.head = nil;
}
func display()
{
if (self.head == nil)
{
print("Empty linked list", terminator: "");
}
else
{
var front: LinkNode? = self.head;
var right: LinkNode? = nil;
while (front != nil)
{
right = front;
while (right != nil)
{
print(right!.data, terminator: " ");
right = right!.next;
}
print();
// Visit to down node
front = front!.down;
}
}
}
func 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
while (i < cols)
{
if (self.head == nil)
{
// Add first node
self.head = LinkNode(matrix[0][i]);
levelHead = self.head;
}
else
{
// next head
levelHead!.next = LinkNode(matrix[0][i]);
levelHead = levelHead!.next;
}
i += 1;
}
// 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(matrix[i][j]);
if (root == nil)
{
root = levelHead!.down;
perv = root;
}
else
{
perv!.next = levelHead!.down;
perv = levelHead!.down;
}
levelHead = levelHead!.next;
j += 1;
}
levelHead = root;
// reset col
j = 0;
// change row
i += 1;
}
}
static func main(_ args: [String])
{
let dll: DoublyLinkedList = DoublyLinkedList();
// Create 2D metrix
let matrix: [
[Int]
] = [
[1, 6, 9, 2, -9],
[2, 5, -5, 7, 1],
[3, 4, 1, 8, 2]
];
let rows: Int = matrix.count;
let cols: Int = matrix[0].count;
dll.insertData(matrix, rows, cols);
dll.display();
}
}
DoublyLinkedList.main([String]());
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