A continuación, hablaremos sobre cómo responder preguntas en entrevistas técnicas, teniendo como referencia que las entrevistas técnicas pueden ser realmente desmotivadoras, por lo que en cada pregunta, es importante saber qué esperar y estar al tanto de las áreas que se van a abordar y probablemente serán cuestionadas.
Afortunadamente, hay una forma de prepararse para cualquier tipo de pregunta que pueda surgir. Se trata de cuatro aspectos principales:
- Comprender la pregunta
- Discutir “compensaciones de soluciones”
- Escribir el código
- Probar el código
Abordaremos esta técnica con un problema que involucra LinkedLists:
El problema planteado
Planteamiento de la cuestión: Una vez dado los LinkedListNodes individuales, determina si las dos listas se cruzan. Devuelve el nodo de intersección. Debes de tener cuenta que la intersección se define en función de la referencia, no del valor. Si el nodo k de la primera lista vinculada es el mismo nodo (por referencia) que el nodo j de la segunda lista vinculada, se están interceptando.
Paso 1: Comprender la pregunta
Es importante saber exactamente lo que se está preguntando. En ese sentido algunas preguntas que podríamos hacerle al entrevistador son:
- ¿Qué es exactamente a lo que queremos regresar? (A: el nodo de intersección).
- ¿Eso significa que podemos suponer que las listas vinculadas se cruzan? (A: sí)
- Siempre es importante tener una idea de la pregunta antes de pensar en el enfoque para resolver.
Paso 2. Discutir las consesiones de las diversas soluciones
Una solución inmediata es revisar ambas listas vinculadas al mismo tiempo hasta llegar a una intersección. Para este ejemplo, haríamos un puntero en los nodos 2 y 7, y atravesaríamos cada uno de ellos uno por uno hasta llegar a un nodo común.
Sin embargo, esto no funcionará ya que las longitudes de las dos LinkedLists pueden ser diferentes. Lo que queremos hacer es «cortar» la parte inicial del LinkedListNode más largo, y luego repetir varias veces.
Esta podría ser el tipo de conversación que tendría con su entrevistador.
Paso 3. Escribe el código
A continuación, se muestra el método para lograr esto.
Aquí tenemos algunos métodos de ayuda. Usamos getKthNode() para obtener el nodo k de la lista vinculada que se dio. Esto es útil cuando se recorre la lista vinculada más larga para «cortar» nodos adicionales.
De la misma forma utilizamos getTailAndSize() que captura tanto la longitud como el último nodo de la lista que se dio. Esto es útil porque necesitamos el tamaño para comparar las longitudes de las listas. También necesitamos las colas porque si las colas de las dos listas no son iguales, entonces no se cruzarán.
Hay que tener en cuenta que cuando decimos: «desigual», queremos decir que los dos nodos no hacen referencia al mismo objeto. Aunque pueden tener el mismo valor y verse idénticos, deben hacer referencia al mismo LinkedListNode para ser iguales.
Regresando a la pregunta, si nos encontramos con el caso donde las colas son desiguales, volveremos a un valor null.
Paso 4: probar el código
Presentamos algunos casos de prueba que pueden surgir. Una regla general útil para los casos de prueba es la siguiente:
- Caso vacío / nulo
- Considerar opciones en el medio / principio / final
- Tamaños iguales o diferentes
Esta estrategia no solo se aplica a las preguntas de LinkedList: podría funcionar para matrices, cadenas y cualquier otra estructura de datos.
Para esta cuestión, nuestras preguntas de LinkedList serían:
- Dos listas enlazadas que se cruzan al principio / medio / final
- Ambas / una lista vinculada es null (debería regresarse a null)
- Las listas enlazadas son del mismo / diferente tamaño
Leíste: cómo responder preguntas en entrevistas técnicas, ahora te recomendamos: ¿Qué es npm? pequeña guía para principiantes
Te invitamos a que nos sigas en nuestras redes sociales: Facebook, Twitter, Instagram y Youtube con el perfil: @tortugacode