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
//1.首先设置一个虚拟的头节点
ListNode dummyNode = new ListNode(-1);
dummyNode.next = head;
//2.指向相应的标志位
ListNode left = dummyNode;
for(int i = 0;i < m-1;i++)
{
left = left.next;
}
ListNode first = left.next;
ListNode last = first;
for(int i = 0;i < n-m;i++)
{
last = last.next;
}
ListNode right = last.next;
//3.断开相应的链接,形成真正的子链
left.next = null;
last.next = null;
//4.调用反转的函数进行反转
reverseList(first);
//5.最后重新进行链接
left.next = last;
first.next = right;
//6.返回头节点
return dummyNode.next;
}
public ListNode reverseList(ListNode head)
{
ListNode pre = head;
ListNode cur = head.next;
ListNode next = null;
while(cur != null)
{
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}
BM2 链表内指定区间反转
最新推荐文章于 2023-12-25 23:12:14 发布