lien
https://leetcode-cn.com/problems/reverse-linked-list-ii/
long
Résolution de problèmes: 1 h 12 min
Résolution de problèmes: 8 min
Titre
Inversez la liste chaînée de la position m à n. Veuillez utiliser une analyse pour terminer l'annulation.
La description:
- 1 ≤ m ≤ n ≤ longueur de la liste chaînée.
Idées
Définissez un nœud left_before avant le nœud de début du flip, et un nœud right_next après le nœud de fin du flip, et placez continuellement le nœud suivant du nœud gauche actuel après left_before jusqu'à ce que right_next soit rencontré.
Complexité temporelle: O (n) O (n)O ( n )
Code AC
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode* dummy_head = new ListNode(-1, head);
ListNode* left_node = dummy_head;
ListNode* left_bef_node = dummy_head;
for(int i = 0; i < left-1; ++i) left_bef_node = left_bef_node->next;
left_node = left_bef_node->next;
ListNode* right_node = dummy_head;
for(int i = 0; i < right; ++i) right_node = right_node->next;
ListNode* right_nex_node = right_node->next;
ListNode* now = left_node->next;
while(now != right_nex_node) {
left_node->next = now->next;
now->next = left_bef_node->next;
left_bef_node->next = now;
now = left_node->next;
}
return dummy_head->next;
}
};