[Lista] --003 probar la oferta de seguridad cabezal de impresión de la lista de cola

título Descripción

Introducir una lista, devolviendo una lista secuencial desde la cola hasta la cabeza de ArrayList.

tema de análisis

Proporciona la lista de títulos es unidireccional, sólo el siguiente puntero, es decir, solamente se accede desde principio a fin. Asunto pidió que regresara en orden desde el extremo de la cabeza de un ArrayList, similar a la forma de pensar "último en salir".

La resolución de problemas

Solución ordinaria: Pila

Usando C ++ pila STL en la aplicación del método. Los pasos principales

  1. Recorrido de la lista almacenada en los valores de nodo definido pila pila;
  2. Acceso elemento superior, en variables del vector, apilar las variables de pila (C ++ de pila en el pop()valor de retorno de la función no está disponible);
  3. las variables del vector de retorno.

código

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> v;
        stack<int> s;
        while(head != NULL){
            s.push(head->val);
            head = head->next;
        }
        while(!s.empty()){
            v.push_back(s.top());
            s.pop();
        }
        return v;
    }
};

solución recursiva

Vector define las variables globales, sistema que utiliza "pila" para completar la salida.

código

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> v;
    vector<int> printListFromTailToHead(ListNode* head) {
        if(head != NULL){
            printListFromTailToHead(head->next);
            v.push_back(head->val);
        }
        return v;
    }
};

Violencia Solución: STL pura

C ++ utilizando el método STL ofertas violencia para resolver

código

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> v;
        while(head != NULL){
            v.push_back(head->val);
            head = head->next;
        }
        vector<int>::reverse_iterator riter; //反向迭代器
        return vector<int>(v.rbegin(),v.rend());
    }
};

Más ideas para la solución combinada a un problema de pensamientos personales y todo el mundo Web pesos pesados, y la discusión de bienvenida con la corrección.

Publicado tres artículos originales · ganado elogios 5 · vistas 67

Supongo que te gusta

Origin blog.csdn.net/garlicup/article/details/105060190
Recomendado
Clasificación