题目描述
给你单链表的头指针 head
和两个整数 left
和 right
,其中 left <= right
。请你反转从位置 left
到位置 right
的链表节点,返回 反转后的链表 。
示例:
输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5]
题目分析
根据题目条件不难得出,只需要获取left与right中间链表的部分,然后将此部分进行反转再次插入原链表即可
为了实现上述操作,首先得编写一个链表反转的方法
java解法
/**
* 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) {
if(head == null || head.next == null) return head;
ListNode pre = new ListNode(0,head);
ListNode start = pre,end = pre;
for(int i = 1; i < left; i++){
start = start.next;
}
for(int i = 0; i < right; i++){
end = end.next;
}
ListNode node = end.next;
end.next = null;
ListNode temp = start.next;
start.next = reverse(temp);
temp.next = node;
return pre.next;
}
//链表反转方法
public ListNode reverse(ListNode head){
ListNode current = head;
ListNode pre = null;
while(current != null){
ListNode node = current.next;
current.next = pre;
pre = current;
current = node;
}
return pre;
}
}