本文最后更新于:2022年7月24日 下午
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
left和right只是第几个节点。
先找到left位置的节点的前一个节点,记为pre;这个pre的指向是永远不改变的。
然后left的位置的节点记为cur,下一个节点为next;
然后开始穿针引线;
把left后面的节点逐一地放到left前面,所以需要放right-left个节点;需要循环right-left次;
| for (int i = 0; i < right - left; i++) { next = cur->next; cur->next = next->next; next->next = pre->next; pre->next = next; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
class Solution { public: ListNode* reverseBetween(ListNode* head, int left, int right) { ListNode* dummy = new ListNode(0); dummy->next = head;
ListNode* pre = dummy;
for (int i = 0; i < left - 1; i++) { pre = pre->next; }
ListNode* cur = pre->next; ListNode* next; for (int i = 0; i < right-left; i++) { next = cur->next; cur->next = next->next; next->next = pre->next; pre->next = next; } return dummy->next; } };
|