(Java)leetcode 92. 反转链表 II

在这里插入图片描述

解题思路: 我们大概可以以这个题目给的情景给一个举例。设pre为前驱节点,cur为当前节点。当我们遍历到2的时候,2.next=3,pre的next节点是2,这时候,我们让2的后继变成前驱的后继,也就是2.next=pre.next,然后顺序就会变成1 3 2 4 5 ,这个时候,pre节点还是1,而2.next就变成了4。这时候,我们再让2.next=pre.next,顺序就会变成1 4 3 2 5了。

如果听不懂可以看我这段代码的注释,我把整体的结点值打印了,然后说明的文字是针对第一次循环去解读的,应该挺仔细的:

class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode pre = dummy;
        for(int i = 1 ; i<m ; i++){
            pre = pre.next;
        }
        head = pre.next;
        for(int i = m ; i<n ; i++){
            ListNode node = head.next;//node是2的下一个节点.node=3
            System.out.println(node.val);//3 4
            head.next = node.next;//让3的下一个节点和2的下一个相同,相当于2->4
            System.out.println(head.val);//2 2
            node.next = pre.next;//让1的下一个节点也就是2变成node的下一个节点,相当于让3->2
            System.out.println(node.val);//3 4
            pre.next = node;//相当于让1->3,最后整体连接起来,第一次的迭代就是1->3->2->4->5
            System.out.println(pre.next.val);//3 4
        }
        return dummy.next;
    }
}
发布了313 篇原创文章 · 获赞 58 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41936805/article/details/104740124