NC21 链表内指定区间反转
描述
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 ,空间复杂度 。
例如:
给出的链表为 , ,
返回 .
数据范围: 链表长度 ,,链表中每个节点的值满足
要求:时间复杂度 ,空间复杂度
进阶:时间复杂度 ,空间复杂度
示例1
输入:
{1,2,3,4,5},2,4
返回值:
{1,4,3,2,5}
代码解析:
import java.util.*;
public class Solution {
public ListNode reverseBetween (ListNode head, int m, int n) {
//加个表头
ListNode res = new ListNode(-1);
res.next = head;
//前序节点
ListNode pre = res;
//当前节点
ListNode cur = head;
//找到m
for(int i = 1; i < m; i++){
pre = cur;
cur = cur.next;
}
//从m反转到n
for(int i = m; i < n; i++){
ListNode temp = cur.next;
cur.next = temp.next;
temp.next = pre.next;
pre.next = temp;
}
//返回去掉表头
return res.next;
}
}
class Solution:
def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
#加个表头
res = ListNode(-1)
res.next = head
#前序节点
pre = res
#当前节点
cur = head
#找到m
for i in range(1,m):
pre = cur
cur = cur.next
#从m反转到n
for i in range(m, n):
temp = cur.next
cur.next = temp.next
temp.next = pre.next
pre.next = temp
#返回去掉表头
return res.next