Reverse the specified interval in the linked list

Title description

Reverse the interval between position m and position n of a linked list. Among them: 1 <= m <= n <= length of the linked list

Example

1 -> 2 -> 3 -> 4 -> 5 ->null, m = 2, n = 4

=> 1 -> 4 -> 3 -> 2 -> 5 -> null

Solution

  1. Locate to the head of the linked list section to be reversed, and record
  2. Position to the end of the linked list interval to be reversed, and record
  3. Reverse interval linked list
  4. Front and back connection

Time complexity: O(n)

Space complexity: O(1)

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    
    
    /**
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    public ListNode reverseBetween (ListNode head, int m, int n) {
    
    
        if (head == null || head.next == null) {
    
    
            return head;
        }
        ListNode preNode = null;
        ListNode phead = head;
        for (int i = 1; i < m; i++) {
    
    
            preNode = phead;
            phead = phead.next;
        }
        ListNode ptail = phead;
        for (int i = 0; i < n - m; i++) {
    
    
            ptail = ptail.next;
        }
        ListNode nextNode = ptail.next;
        ptail.next = null;
        if (preNode == null) {
    
    				//特殊情况处理
            head = reverse(phead);
        } else {
    
    
            preNode.next = reverse(phead);
        }
        phead.next = nextNode;
        return head;
    }
    
    public ListNode reverse (ListNode head) {
    
    
        if (head == null || head.next == null) {
    
    
            return head;
        }
        ListNode preNode = head;
        ListNode target = head.next;
        while (target != null) {
    
    
            preNode.next = target.next;
            target.next = head;
            head = target;
            target = preNode.next;
        }
        return head;
    }
}

Guess you like

Origin blog.csdn.net/weixin_44723496/article/details/113125774