функция рекурсии продолжает работать и ничего не печатает - PullRequest
0 голосов
/ 12 марта 2020

Короче говоря, я должен создать код, который вставляет, удаляет, ищет и печатает числа в списке пропусков, где первый узел - отрицательная бесконечность, а последний - положительная бесконечность (-inf> (.. .)> инф). Я вызвал свою функцию поиска из функции вставки, чтобы найти место для вставки любых новых узлов (только после того, как третий узел был вставлен), и я инициализирую или ссылаюсь на свои узлы вне основной функции, а не внутри нее (хотя я спорю о том, должен ли я сделать последнее вместо этого). Однако одна из моих функций может зависнуть в al oop.

static Node search(double item, double max) {
  Node head2 = head;
  head2 = Start(head2, max);
  //starts at the first highest node in the skiplist

  //{... } //find a specific node in a skiplist

  return head2;
}

//find first highest node for the search function
static Node Start(Node head2, double max) {
  System.out.println(head.key + " " + head.level);

  Node s = new Node();
  if (head2.max < max) {
    s = Start(head2.next, max);
    return s;
  }
  else if (head2.max >= max && head2.inf == false) {
    if (head2.level < head2.max) {
      s = Start(head2.up, max);
      return s;
    }
    else if (head2.level == head2.max) {
      s = head;
      return s;
    }
  }
  return s;
}

Функция запуска вызывается из функции поиска (вызывается в порядке main> double insert> Node search> Node start), и она Предполагается найти первый узел высшего уровня. Как только он это делает, он возвращает этот узел в функцию поиска, чтобы он мог начать свой поиск оттуда. Но когда вызывается, он просто гаснет и ничего не происходит, несмотря на то, что продолжает работать. Когда я вставляю функцию печати, чтобы определить проблему, она просто печатает ключ первого узла и 1-й уровень и оттуда очищается. ОБНОВЛЕНИЕ: я узнал, что функция может найти узел, но не может вернуть его через рекурсию. Я хотел бы найти способ исправить это.

1 Ответ

0 голосов
/ 16 марта 2020

Проблема была на самом деле в моей функции поиска.

for(j = max; j >= 1; j--) {
            while(head2.next != last && head2.key != item && i == 0) {
                if(item > head2.key && head2.next != last) {
                    head2 = head2.next;
                }
                else if(item < head2.key || head2.next == last) {
                    head2 = head2.prev;
                    i = 1;
                }
            }
 (...)}

это была функция, которая продолжала работать в цикле, поэтому мне пришлось изменить оператор на while, чтобы он произнес это вместо while (head2.next! = last && head2.key

...