Linked List code

Run Settings
LanguageSwift
Language Version
Run Command
// 1 extension LinkedList: CustomStringConvertible { // 2 public var description: String { // 3 var text = "[" var node: Node? = head // 4 while node != nil { text += "\(node!.value)" node = node!.next if node != nil { text += ", " } } // 5 return text + "]" } } class Node { var value: Int var next: Node? init(_ value: Int) { self.value = value self.next = nil } } class LinkedList { var head: Node var tail: Node var length: Int init(_ value: Int) { self.head = Node(value) self.head.next = nil self.tail = self.head self.length = 1 } func append(_ value: Int) { self.tail.next = Node(value) self.tail = self.tail.next! self.length += 1 } func prepend(_ value: Int) { var temp = self.head self.head = Node(value) self.head.next = temp self.length += 1 } func remove(index: Int) { if index >= self.length { //return something } else if (index == 0) { self.head = self.head.next! self.length -= 1 } else { var preNode = getNodeAtIndex(index-1) var node = preNode.next! if let postNode = node.next { preNode.next = postNode } else { print("hEY") preNode.next = nil self.tail = preNode } self.length -= 1 } } func insert(_ value: Int, index: Int) { var node = self.head if index >= self.length { //return something } else if (index == 0) { self.prepend(value); } else { var preNode = getNodeAtIndex(index-1) var postNode = preNode.next var newNode = Node(value) preNode.next = newNode newNode.next = postNode self.length += 1 } } func getNodeAtIndex(_ index: Int) -> Node { var node = self.head for i in 0..<index { if node != nil { node = node.next! //print(node.value) } else { break; } } return node } } var myLinkedList = LinkedList(10) myLinkedList.append(5) myLinkedList.append(16) myLinkedList.prepend(1) myLinkedList.insert(2, index: 0) myLinkedList.remove(index: 4) print(myLinkedList.tail.value) print(myLinkedList) print(myLinkedList.length)
Editor Settings
Theme
Key bindings
Full width
Lines