题目
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
- 来源:力扣(LeetCode)
- 链接:leetcode-cn.com/problems/re…
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode dummyHead = new ListNode();
dummyHead.next = head;
ListNode pre = dummyHead;
for (int i = 1; i < left; i++) {
pre = pre.next;
}
ListNode p = pre.next;
for (int i = left; i < right; i++) {
ListNode next = p.next;
p.next = next.next;
next.next = pre.next;
pre.next = next;
}
return dummyHead.next;
}
update20220406
思路
找到开始反转的前一个节点,不停的头插法。
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode dummyHead = new ListNode();
dummyHead.next = head;
ListNode pre = dummyHead;
ListNode p = head;
for (int i = 1; i < left; i++) {
pre = pre.next;
p = p.next;
}
for (int i = left; i < right; i++) {
ListNode next = p.next.next;
p.next.next = pre.next;
pre.next = p.next;
p.next = next;
}
return dummyHead.next;
}