其他分享
首页 > 其他分享> > 说了你可能不信leetcode刷题局部链表反转D92存在bug,你看了就知道了

说了你可能不信leetcode刷题局部链表反转D92存在bug,你看了就知道了

作者:互联网

一、题目描述

找出数组中重复的数字

> 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

二、思路分析

image-20210520092044810

image-20210520101924193

image-20210520102153449

三、AC 代码

bug

//外边界左侧节点
private static ListNode firstNode ;
//外边界右侧节点
private static ListNode lastNode ;
public ListNode reverseBetween(ListNode head, int left, int right) {
    //preNode 作为接受反转节点
    ListNode preNode=null;
    //用于指向当前操作节点 ,  也是内部右侧节点
    ListNode currentNode = head;
    //存储下一节点,方便赋值
    ListNode nextNode=null;
	//内部左侧节点
    ListNode leftNode=head;
    int index =1 ;
    while (currentNode != null) {
        nextNode = currentNode.next;
        if (index == left-1) {
            //捕获外部边界节点
            firstNode = currentNode;
        }
        if (index >= left && index <= right) {
			//指针修复
            currentNode.next = preNode;
            preNode = currentNode;
        }
        currentNode = nextNode;
        if (index == right) {
            //捕获外部边界节点
            lastNode = nextNode;
            break;
        }
        index++;
    }
    //因为是指定范围但是有可能是全部链表这时候外部边界都是null
    if (firstNode != null) {
        leftNode = firstNode.next;
        firstNode.next = preNode;
    }
    if (lastNode != null) {
        leftNode.next = lastNode;
        return head;
    } else {
        return preNode;
    }
}

image-20210520104258995

添加头结点

image-20210520132414970

image-20210520135606544

firstNode.next = rightNode;
leftNode.next = lastNode;	
private static ListNode firstNode ;
private static ListNode lastNode ;
public ListNode reverseBetween2(ListNode head, int left, int right) {
    ListNode visualNode = new ListNode(-1, head);
    firstNode = visualNode;
    for (int i = 1;i < left; i++) {
        firstNode = firstNode.next;
    }
    ListNode rightNode = firstNode;
    for (int i = 0; i < right - left + 1; i++) {
        rightNode = rightNode.next;
    }
    ListNode leftNode = firstNode.next;
    lastNode = rightNode.next;
    rightNode.next = null;
    ListNode wpre = null;
    ListNode wcur = leftNode;
    while (wcur != null) {
        ListNode next = wcur.next;
        wcur.next = wpre;
        wpre = wcur;
        wcur = next;
    }
    firstNode.next = rightNode;
    leftNode.next = lastNode;
    return visualNode.next;
}

image-20210520135905591

四、总结

标签:ListNode,lastNode,D92,bug,链表,firstNode,next,preNode,节点
来源: https://www.cnblogs.com/zhangxinhua/p/14792308.html