Как добавить логику в алгоритм удаления отсортированного массива, чтобы учесть сценарий "узел не найден"?

Мне было поручено написать алгоритм удаления для моей отсортированной структуры массива. Это продолжает быть источником проблем для моей программы, потому что, в некоторых случаях, она завершает удаление, когда должна возвращать False для "узел не найден". Таким образом, функция удаления работает, но она делает это, даже когда узел не найден. Где недостаток в моей логике?

    public boolean delete(String targetListing)
    {
        int low = 0;
        int high = next - 1;
        int i = (low + high) / 2;

        //check to see if target listing is the same as the current node key field
        while(data[i].getName().compareToIgnoreCase(targetListing) != 0 && high != low)   
        {
            if(data[i].getName().compareToIgnoreCase(targetListing) >= 1)
            {
                high = i - 1; //eliminate the bottom of the array
            }
            else
            {
                low = i + 1; //eliminate the top of the array
            }

            i = (low + high) / 2;  
        }
        //this is my logic to determine if the node was found or not
        //I also tried if(low == high) but sometimes that would be true at the 
        //at the position that the node was found      
        if(i == next || i < 0)
        {
            return false; //node not found
        }

        for(int j = i; j < next - 1; j++)
        {
            data[j] = data[j + 1];
        }

        next = next - 1;
        data[next] = null;
        return true;//node found and deleted

Если бы кто-то мог также указать мне хороший пример алгоритма удаления отсортированного массива, который учитывает сценарий отсутствия узла, я был бы очень признателен. Я бы подумал, что это будет очень легко найти, но мне трудно найти его.

1 ответ

Решение

Самый простой ответ: замените свой if(i == next || i < 0) с if(data[i].getName().compareToIgnoreCase(targetListing) != 0) - другими словами, проверьте, что вы действительно нашли совпадение, а не просто сузились до единственной возможности.

Другие вопросы по тегам