牛客网在线编程第二题-链表指定区域内反转

牛客网在线编程第二题-链表指定区域内反转_第1张图片    这道题被爱学习的你看到了,很棒!那今天就花十五分钟的时间,一起来看下链表指定区域反转。来说下解题思路:

如图所示,首先要设一个虚拟头节点dummy,为了固定好头节点位置,这样只关心dummy.next。

接下来会用到就像抽书法这样一个思想。反转区间为n-m,若按图中反转区间为3-5。这样只需要抽2次,就能实现区间反转。

让pre指向反转区间的前面一个节点,cur指向当前反转区间的第一个节点,temp指向cur的下一个节点。抽书两次即可。

​​​​​​​牛客网在线编程第二题-链表指定区域内反转_第2张图片

 代码如下:

public class Solution {

    public ListNode reverseBetween (ListNode head, int m, int n) {
        ListNode dummy = new ListNode(-1); /*new 一个虚拟头节点*/
        dummy.next = head;
        ListNode pre = dummy;
        /*找到反转区间的第一个节点*/
        for (int i = 0; i < m - 1; i++) {
            pre = pre.next;
        }
        ListNode cur = pre.next;
        ListNode temp;
        for (int i = 0; i < n - m; i++) {
            temp = cur.next;
            cur.next = temp.next;
            temp.next = pre.next;
            pre.next = temp;
        }
        return dummy.next;
    }
}

 

 

 

 

 

 

 

 

你可能感兴趣的:(链表,数据结构,算法,java)