基础题,考察反转单链表。需要注意细节处理。
用了一个while遍历链表,常熟个变量存放数据。时间复杂度O(n),空间复杂度O(1)。满足题目要求。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
ListNode* reverseBetween(ListNode* head, int m, int n) {
// write code here
if(n == 1 || m == n){
return head;
}
ListNode* p = head;
ListNode* before = nullptr;
ListNode* after = nullptr;
ListNode* pre = nullptr;
ListNode* front = nullptr;
ListNode* back = nullptr;
int i = 0;
m--;
n--;
while(p){
if(i == m - 1){
before = p;
}
else if(i == n + 1){
after = p;
}
if(i == m){
front = p;
}
else if(i == n){
back = p;
}
if(i > m && i <= n){
ListNode* temp = p;
p = p->next;
temp->next = pre;
pre = temp;
}
else
{
pre = p;
p = p->next;
}
i++;
}
if(before){
before->next = back;
}
else{
head = back;
}
front->next = after;
return head;
}
};
京公网安备 11010502036488号