//Add
// Big O notation: O(1)
//takes in a new node to insert
if head equals null or head.data >= newNode.data
    newNode.next = head
    head = newNode
    return head

currentNode = head
while currentNode.next is not null and currentNode.next.data < newNode.data
    currentNode = currentNode.next
    
newNode.next = currentNode.next
currentNode.next = newNode
return head
//Delete
// Big O notation: O(1)
//takes in a value to delete
if head.data equals value
    head = head.next
else
    lastNode = head
    currentNode = head.next
    
    while currentNode not equals null
        if currentNode.data equals value
            lastNode.next = currentNode.next
        else
            lastNode = currentNode
            currentNode = currentNode.next
//Searching
// Big O notation: O(n)
//takes in head and value to search
currentNode = head
while currentNode not equals null
    if currentNode equals value
        return currentNode
    currentNode = currentNode.next
//Traversal
// Big O notation: O(n)
//takes in head
if head equals null
    return
currentNode = head
while currentNode not equals null 
    result = result + currentNode.data + " "
    currentNode = currentNode.next
    
return result