Leetcode刷题笔记题解(C++):92. 反转链表 II
2023-12-13 22:00:15
思路:获取要反转的区间,拆开之后进行反转再拼接
/**
* 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 m, int n) {
// write code here
ListNode* temp = new ListNode(0);
temp->next = head;
ListNode* left = temp;
//left为前段不反转的最后一个节点
for(int i = 0; i<m-1; i++){
left = left->next;
}
ListNode* right = left;
//right为反转区间的最后一个节点
for(int i = 0; i<n-m+1; i++){
right = right->next;
}
//leftNode为反转区间的第一个节点
ListNode *leftNode = left->next;
//RightNode为后段不反转区间的第一个节点
ListNode *RightNode = right->next;
//前段不反转的最后一个节点之后断开
left->next = nullptr;
//后段不反转的第一个节点之前断开
right->next = nullptr;
//对反转区间进行反转之后,leftNode为最后一个节点,right为第一个节点
ReverseList(leftNode);
left->next = right;
leftNode->next = RightNode;
return temp->next;
}
void ReverseList(ListNode* head){
ListNode* ret = nullptr;
ListNode* temp = nullptr;
ListNode* result = head;
while(result){
temp = result->next;
result->next = ret;
ret = result;
result = temp;
}
}
};
文章来源:https://blog.csdn.net/qq_27524749/article/details/134842195
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!