说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
使用头插法。定义一个新增的Node放在第一位。然后定义一个g Node 和一个 p Node。
其中 p 就是m位置 Node,g为 p前一个node。
此时就将p.next 赋给 g.next 。就是将p的下一个位置始终插入开头处,一直循环到n位置。
最后返回的新增节点的next 就是反转的链表
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next;
}
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode g = dummyHead;
ListNode p = dummyHead.next;
int step = 0;
while (step < m - 1) {
g = g.next; p = p.next;
step ++;
}