import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
public ListNode reverseBetween (ListNode head, int m, int n) {
// write code here
if(head==null){
return null;
}
if(head.next==null){
return head;
}
if(m>n || m<1){
return head;
}
ListNode newHead = new ListNode(-1);
newHead.next = head;
ListNode perNode = newHead;
for(int i=0;i<m-1;i++){
perNode = perNode.next;
}
ListNode curNode = perNode.next;
ListNode nextNode = perNode;
for(int j=0;j<n-m+1;j++){
nextNode = nextNode.next;
}
ListNode node = nextNode.next;
perNode.next = null;
nextNode.next = null;
reverseLinkedList(curNode);
perNode.next = nextNode;
curNode.next = node;
return newHead.next;
}
private void reverseLinkedList(ListNode head){
ListNode pre = null;
ListNode cur = head;
while(cur!=null){
//Cur_next 指向cur节点的下一个节点
ListNode Cur_next = cur.next;
cur.next = pre;
pre = cur;
cur = Cur_next ;
}
}
}
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。例如:给出的链表为 1\to 2 \to 3 \to 4 \to
最新推荐文章于 2023-04-10 23:39:49 发布