将一个链表\m 位置到 n 位置之间的区间反转,要求时间复杂度 ,空间复杂度 。
例如:
给出的链表为 1→2→3→4→5→NULL, ,,
返回 1→4→3→2→5→NULL.
注意:给出的 满足以下条件: 链表长度1≤m≤n≤链表长度
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(m == n) return head;
//定义dummy指向 head 防止head丢失
ListNode dummy = new ListNode(0);
dummy.next = head;
//pre节点永远指向m的前一个节点 保存m之前的节点
ListNode pre = dummy;
ListNode m_node = head;
ListNode n_node = head;
for(int i = 1;i < m;i++){
pre = pre.next;
m_node = m_node.next;
}
for(int i = 1;i < n;i++){
n_node = n_node.next;
}
//当m_node == n_node 说明排序完成
while(n_node != m_node){
pre.next = m_node.next;
m_node.next = n_node.next;
n_node.next =m_node;
m_node = pre.next;
}
return dummy.next;
}
}