翻转链表II
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

分享一下思路:定义一个虚节点dummy,后续节点指向head节点,获取left之前的节点为p和left节点为m和left之后的节点为n,将m和n节点两两交换,然后交换right - left次,然后把p的net的next指向n节点,换句话说是p节点的后续节点是原先left节点,然后把它的next指向原先right节点的后续节点,把p的next节点指向m节点。
/** * Definition for singly-linked list. * 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; } * } */ class Solution { public ListNode reverseBetween(ListNode head, int left, int right) { ListNode dummy = new ListNode(-1); dummy.next = head; ListNode p = dummy; for (int i = 0; i < left - 1; i++) { p = p.next; } ListNode m = p.next; ListNode n = m.next; for (int i = 0; i < right - left; i++) { ListNode temp = n.next; n.next = m; m = n; n = temp; } p.next.next = n; p.next = m; return dummy.next; } }

浙公网安备 33010602011771号