public SinglyLinkedList<NodeType> merge(SinglyLinkedList<NodeType> otherList) {
			Node<NodeType> ownNode = this.head.next;
			Node<NodeType> otherNode = otherList.head.next;
			Node<NodeType> prevOwnNode = this.head;
			Node<NodeType> nextOtherNode;
			
			if (ownNode == this.tail) {  // we are empty
				this.concat(otherList);
				return this;
			} else if (otherNode == otherList.tail) { // other list is empty
					return this; // noop
			}
			
			while(otherNode != otherList.tail) {
				while(ownNode != this.tail && (ownNode.value.compareTo(otherNode.value) < 0)) {
					prevOwnNode = ownNode;
					ownNode = ownNode.next;
				}
				
				nextOtherNode = otherNode.next;
				prevOwnNode.setNext(otherNode);
				otherNode.setNext(ownNode);
				
				if (ownNode.next == this.tail) {
					ownNode.setNext(otherNode);
					otherNode = nextOtherNode;
					break;
				}
				
				ownNode = otherNode;
				otherNode = nextOtherNode;
			}
			
			if (otherNode != otherList.tail) {
				this.tail.next.setNext(otherNode);
				this.tail = otherList.tail;
			}
			
			return this;
		}