private boolean searchAndIncrement(String domain) {
        ListNode currNode = this.head;
        
        if (currNode == null) {
            this.head = new ListNode(domain);
            return true;
        } else if (currNode.key.equals(domain)) {
            this.head.value++;
            return false;
        }
        
        if (currNode.next == null) {
            this.head.next = new ListNode(domain, this.head);
            return true;
        } else if (currNode.next.key.equals(domain)) {
            this.head.next.value++;
            if (this.head.next.value > this.head.value) {
                this.head = this.swapNodes(this.head);
            }
            return false;
        }
        
        while (currNode.next != null) {
            if (currNode.next.key.equals(domain)) {
                currNode.next.value++;
                while (currNode.next.value > currNode.value) {
                    currNode = this.swapNodes(currNode);
                    if (currNode.prev == null) {
                        this.head = currNode;
                        return true;
                    } else {
                        currNode = currNode.prev;
                    }
                }
                
                return true;
            }
            currNode = currNode.next;
        }
        
        currNode.next = new ListNode(domain, currNode);   
        
        return false;
        
    }