描述
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
分析
写一个反转链表的方法以供调用。
找到如下关键四个结点:
反转left,right之间的链表,再和pre,succ连接。
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode dummy = new ListNode(1);
ListNode pre = new ListNode();
ListNode end = new ListNode();
ListNode cur = new ListNode();
ListNode l = new ListNode();
ListNode r = new ListNode();
cur = dummy;
cur.next = head;
int step = 0;
while(step != right){
if(step == left -1){
pre = cur;
l = cur.next;
}
cur = cur.next;
step++;
}
r = cur;
end = cur.next;
r.next = null;
reverse(l);
pre.next = r;
l.next = end;
return dummy.next;
}
public void reverse(ListNode head){
ListNode pre = null;
while(head != null){
ListNode tmp = head.next;
head.next = pre;
pre = head;
head = tmp;
}
}
}