LeetCode 92. 反转链表 II

2019-07-14  本文已影响0人  怀旧的艾克

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

示例:

输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

题解

java代码如下

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        int changeLen = n - m + 1;
        ListNode preHead = null;
        ListNode result = head;
        
        while(head != null && m > 1) {
            preHead = head;
            head = head.next;
            m--;
        }
        
        ListNode modifyLastTail = head;
        ListNode newHead = null;
        
        // 中间段逆置,使用新的newHead指针,就地逆置
        while(head != null && changeLen > 0) {
            ListNode ptr = head.next;
            head.next = newHead;
            newHead = head;
            head = ptr;
            changeLen--;
        }
        
        modifyLastTail.next = head;
        
        if(preHead != null) {
            preHead.next = newHead;
        } else {
            result = newHead;
        }
        
        return result;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读