Juzgue si una lista vinculada es una lista vinculada palíndromo.
Ejemplo 1:
Entrada: 1-> 2
Salida: falso
Ejemplo 2:
Entrada: 1-> 2-> 2-> 1
Salida: verdadera
Avanzado:
¿Puedes resolver este problema con O (n) complejidad temporal y O (1) complejidad espacial?
Idea de resolución de problemas: Hice
un problema de lista vinculada reciente y descubrí que el método de doble puntero es un arma única para resolver este tipo de problema. Aquí, los datos de la lista vinculada se almacenan primero en el contenedor, y luego el doble puntero comienza desde la cabeza y el otro comienza desde la cola. Si son diferentes, devuelva falso hasta que los punteros dobles se encuentren. El código es el siguiente:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool isPalindrome(ListNode* head) {
vector<int> res;
while(head != NULL){
res.push_back(head -> val);
head = head -> next;
}
for(int i = 0, j = res.size() - 1; i < j; i ++, j --){
if(res[i] != res[j]){
return false;
}
}
return true;
}
};