/**
         *  Elimina el nodo acual y devuelve el valor grabado en dicho nodo
         *  Side effects: el nodo actual debe moverse a uno de los nodos adyacentes
         *                (si existe) del nodo borrado
         *  @return       el valor grabado en la posicion actual
         */
        public int remove()
        {
            if (size == 0)
            {
                throw new EmptyListException();
            }

            int ret = curent.value;

            if (size == 1)
            {
                curent = null;
                size   = 0;
                return(ret);
            }

            CLinkNode prev = curent.prev;
            CLinkNode next = curent.next;

            prev.next = next;
            next.prev = prev;
            size--;

            curent = next;

            return(ret);
        }
        /**
         *  Agrega el valor val a la lista
         *  Side effects: El nodo actual se mueve al nuevo nodo creado
         *  @param  val  valor a agregar a la lista
         */

        public void add(int val)
        {
            if (size == 0)
            {
                CLinkNode newNode = new CLinkNode(val);
                newNode.next = newNode;
                newNode.prev = newNode;
                curent       = newNode;
            }
            if (size == 1)
            {
                CLinkNode newNode = new CLinkNode(val);
                newNode.prev = curent;
                newNode.next = curent;
                curent.next  = newNode;
                curent.prev  = newNode;
            }
            if (size > 1)
            {
                CLinkNode newNode = new CLinkNode(val);
                newNode.prev     = curent.prev;
                newNode.next     = curent;
                curent.prev.next = newNode;
                curent.prev      = newNode;
            }

            size++;
        }
Exemplo n.º 3
0
    /**
     *  Agrega el valor val a la lista
     *  Side effects: El nodo actual se mueve al nuevo nodo creado
     *  @param  val  valor a agregar a la lista
     */
    public void add(int val)
    {
        // TODO: implementar
        // NOTA: puedes insertar el valor en cualquier posicion de la lista,
        //       teniendo en cuenta la complejidad deseada y el codigo que
        //       tendras que escribir en la clase Lab2c
        // Complejidad esperada: O(1) en worst-case
        // Valor: 3 puntos

        CLinkNode newNode = new CLinkNode(val);

        if (size == 0)
        {
            newNode.next = newNode;
            newNode.prev = newNode;
            cur          = newNode;
            size         = 1;
            return;
        }

        CLinkNode nxt = cur.next;

        newNode.prev = cur;
        newNode.next = nxt;
        cur.next     = newNode;
        nxt.prev     = newNode;
        cur          = newNode;
        size++;
    }
Exemplo n.º 4
0
    /**
     *  Elimina el nodo acual y devuelve el valor grabado en dicho nodo
     *  Side effects: el nodo actual debe moverse a uno de los nodos adyacentes
     *                (si existe) del nodo borrado
     *  @return       el valor grabado en la posicion actual
     */
    public int remove()
    {
        if (size == 0)
        {
            throw new EmptyListException();
        }

        // TODO: implementar
        // Complejidad esperada: O(1) en worst-case
        // Valor: 3 puntos

        int ret = cur.value;

        if (size == 1)
        {
            cur  = null;
            size = 0;
            return(ret);
        }

        CLinkNode prv = cur.prev;
        CLinkNode nxt = cur.next;

        prv.next = nxt;
        nxt.prev = prv;
        size--;

        cur = nxt;

        return(ret);
    }
Exemplo n.º 5
0
    /**
     * Mueve el nodo actual 'cur' steps pasos.
     *    Si steps es positivo, se mueve hacia adelante
     *    Si steps es negativo, mueve hacia atras
     *    Si steps == 0, se queda donde esta
     * @param   la cantidad de pasos a moverse
     */
    public void moveTo(int steps)
    {
        // TODO: implementar
        // Complejidad esperada: O(min(|steps|, N)) en worst-case, donde steps
        //                       es el parametro de este metodo
        // OJO: Es posible que |steps| > N
        // Valor: 2 puntos

        if (steps == 0)
        {
            return;
        }

        if (steps > 0)
        {
            for (int i = 0; i < steps; i++)
            {
                cur = cur.next;
            }
        }
        else
        {
            steps = -steps;
            for (int i = 0; i < steps; i++)
            {
                cur = cur.prev;
            }
        }
    }
        /**
         * Devuelve el valor grabado en el nodo actual
         * @return        el valor en el nodo actual
         **/
        public int get()
        {
            if (size == 0)
            {
                throw new EmptyListException();
            }
            int ret = curent.value;

            curent = curent.next;
            return(ret);
        }
        /**
         * Localiza el valor en la lista, reposicionando el nodo actual al nodo
         * que contiene dicho valor.  Si la lista contiene multiples valores
         * duplicados, puedes elegir cualquiera.
         * @param  val  valor a buscar en la lista
         * @return      true si lo encuentra; de lo contrario, devuelve false
         */
        public bool locate(int val)
        {
            for (int i = 0; i < size; i++)
            {
                if (curent.next.value == val)
                {
                    curent = curent.next;
                    return(true);
                }

                curent = curent.next;
            }
            return(false);
        }
        override public string ToString()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("size = ");
            sb.Append(size);
            sb.Append("  elementos = (");
            CLinkNode cur = curent;

            for (int i = 0; i < size; i++)
            {
                sb.Append(" ");
                sb.Append(cur.value);
                cur = cur.next;
            }

            sb.Append(" )");
            return(sb.ToString());
        }
Exemplo n.º 9
0
    /**
     * Localiza el valor en la lista, reposicionando el nodo actual al nodo
     * que contiene dicho valor.  Si la lista contiene multiples valores
     * duplicados, puedes elegir cualquiera.
     * @param  val  valor a buscar en la lista
     * @return      true si lo encuentra; de lo contrario, devuelve false
     */
    public bool locate(int val)
    {
        // TODO: implementar
        // Complejidad esperada: O(N) en worst-case
        // Valor: 1 punto

        CLinkNode x = cur;

        for (int i = 0; i < size; i++)
        {
            if (x.value == val)
            {
                cur = x;
                return(true);
            }
            x = x.next;
        }

        return(false);
    }
        /**
         * Mueve el nodo actual 'cur' steps pasos.
         *    Si steps es positivo, se mueve hacia adelante
         *    Si steps es negativo, mueve hacia atras
         *    Si steps == 0, se queda donde esta
         * @param   la cantidad de pasos a moverse
         */
        public void moveTo(int steps)
        {
            if (steps == 0)
            {
            }

            if (steps > 0)
            {
                for (int i = 0; i < steps; i++)
                {
                    curent = curent.next;
                }
            }

            if (steps < 0)
            {
                int ret = steps * -1;
                for (int i = 0; i < ret; i++)
                {
                    curent = curent.prev;
                }
            }
        }