Skip to content

Instantly share code, notes, and snippets.

@karthikgs7
Created September 7, 2020 19:11
Show Gist options
  • Save karthikgs7/f1b3421b091b4104f9d690f25ee0d3d1 to your computer and use it in GitHub Desktop.
Save karthikgs7/f1b3421b091b4104f9d690f25ee0d3d1 to your computer and use it in GitHub Desktop.
LinkedList Node
class Node: ExpressibleByIntegerLiteral, ExpressibleByArrayLiteral {
var value: Int
var next: Node?
init(value: Int, next: Node? = nil) {
self.value = value
self.next = next
}
required init(integerLiteral value: Int) {
self.value = value
}
required init(arrayLiteral elements: Int...) {
precondition(!elements.isEmpty)
self.value = elements.first!
let tail = elements.dropFirst()
var current: Node? = self
for item in tail {
current?.next = Node(value: item)
current = current?.next
}
}
}
extension Node: CustomDebugStringConvertible {
var debugDescription: String {
var result = " - \(self.value) - "
if let nextNode = self.next {
result += nextNode.debugDescription
}
return result
}
}
extension Node: Equatable {
static func == (lhs: Node, rhs: Node) -> Bool {
return (lhs.value == rhs.value) && (lhs.next == rhs.next)
}
}
precedencegroup CombinePrecedence {
associativity: left
}
infix operator <->: CombinePrecedence
func <->(_ lhs: Node, rhs: Node) -> Node {
var current: Node? = lhs
while current?.next != nil {
current = current?.next
}
current?.next = rhs
return lhs
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment