反转链表二--LeetCode
题目
给你单链表的头指针 head
和两个整数 left
和 right
,其中 left <= right
。请你反转从位置 left
到位置 right
的链表节点,返回 反转后的链表 。
示例 1:
输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1
输出:[5]
该道题思路与反转链表--LeetCode_反转单向链表 leetcode-CSDN博客一致,就是多出了反转的范围,我们依旧采用三个指针来记录数据,将pre指针定位到要反转的前一位,只需将指针遍历left-1次,定义cur指针为pre的下一个指针,然后进行right-left次遍历,先将前两个链表进行转换,再将转换后的视为一个整体,继续进行right-left次转换,就可将链表中特定区域进行指针反转
/*** 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();dummy.next = head;ListNode pre = dummy;//将pre指针定位到反转前一位for(int i = 0; i < left - 1;i++){pre = pre.next;}ListNode cur = pre.next;//cur是要反转链表的第一个节点for(int i = 0;i < right - left;i++){ListNode tmp = cur.next;cur.next = tmp.next;//将前面节点往后排tmp.next = pre.next;//将后面节点排到前面pre.next = tmp;}return dummy.next;}
}