Notas de cepillado de Leetcode (C++) - recursividad
Ordene las ideas en el proceso de repasar las preguntas, resúmalas y compártalas aquí.
dirección de github: https://github.com/lvjian0706/Leetcode-solutions
El proyecto de github se creó recientemente, y el código y las ideas se cargarán uno tras otro. El código está basado en C++ y python. Al mismo tiempo, el algoritmo de clasificación básico también se clasificará y cargará.
24. Intercambia los nodos en la lista enlazada de dos en dos
Dada una lista enlazada, intercambie los nodos adyacentes de dos en dos y devuelva la lista enlazada intercambiada.
No puede simplemente cambiar el valor dentro del nodo, sino que necesita intercambiar el nodo.
Ejemplo:
dado 1->2->3->4, debe devolver 2->1->4->3.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/*
两两交换链表中相邻的节点:递归
1. 如果链表长度小于2,不用交换直接返回;
2. 先交换head->next->next后边的链表(只留前两个);
3. 定义new_head(也就是结果链表的头节点)为head->next,head指向交换完的head->next->next后边链表的头指针,new_head指向head;
*/
ListNode* swapPairs(ListNode* head) {
if(!head || !head->next) return head;
ListNode* temp = swapPairs(head->next->next);
ListNode* new_head = head->next;
head->next = temp;
new_head->next = head;
return new_head;
}
};