Leetcode92. 反转链表 II
Posted _Karry
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode92. 反转链表 II相关的知识,希望对你有一定的参考价值。
题目描述
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表
代码
/**
* 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 *result = head;
int change_num = right - left + 1;
ListNode *pre_head = nullptr;
while(head && --left){
pre_head = head;
head = head->next;
}
ListNode *new_tail = head; //记录反转之后的尾节点,为了与后面的数据连接
ListNode *new_head = nullptr; //反转之后的新头节点
while(head && change_num--){
ListNode *next = head->next;
head->next = new_head;
new_head = head;
head = next;
}
new_tail->next = head; //反转之后的链表与后面的数据连接
//反转之后的链表与前面的数据连接,需要判断是否从第一个节点就开始反转了
if(pre_head){
pre_head->next = new_head;
}
else{
result = new_head;
}
return result;
}
};
以上是关于Leetcode92. 反转链表 II的主要内容,如果未能解决你的问题,请参考以下文章