Как вставить номер в отсортированный связанный список - PullRequest
0 голосов
/ 06 июня 2019

У меня есть задание, для которого мне нужно написать класс с именем IntListTwo, который представляет собой двусторонний связанный список.У меня есть данный класс, который называется IntNodeTwo

public class IntNodeTwo
{
 private int _num;
 private IntNodeTwo _next, _prev;
 public IntNodeTwo(int n) {
 _num = n;
 _next = null;
 _prev = null;
 }
 public IntNodeTwo(int num, IntNodeTwo n, IntNodeTwo p) {
 _num = num;
 _next = n;
 _prev = p;
 }
 public int getNum() { return _num; }
 public IntNodeTwo getNext() { return _next; }
 public IntNodeTwo getPrev() { return _prev; }
 public void setNum (int n) { _num = n; }
 public void setNext (IntNodeTwo node) { _next = node; }
 public void setPrev (IntNodeTwo node) { _prev = node; }
} 

И в IntListTwo у меня есть поле "_head", которое является главой списка

Это то, что я пытался сделать

public void addNumber(int num) {

        IntNodeTwo p = new IntNodeTwo(num);

        if (_head == null) {
            _head.setNum(num);
            return;
        }
        if (_head.getNum() > num) {
            IntNodeTwo temp = _head;
            _head = _head.getNext();
            temp = p;
            return;
        }
        else {
            _head = _head.getNext();
            addNumber(num);

        }
    }

Например, если у меня есть список {2,5,8,9} и num = 4, я получу {2,4,5,8,9}

Ответы [ 2 ]

0 голосов
/ 07 июня 2019
    public void addNumber(int num) {

    IntNodeTwo p = new IntNodeTwo(num);

    if (_head == null) {
        _head = new IntNodeTwo(num);
        _head = _tail;
        return;
    }
    if (_head.getNum() > num) {
        IntNodeTwo temp = new IntNodeTwo(num,_head,null);
        temp = _head;

        return;
    }
    else {
        while(num > _head.getNum()) {
            if(_head == null) {
                _head = new IntNodeTwo(num);
                break;
            }
            else {
                p = _head.getNext();
                p = new IntNodeTwo(num);
            }
        }

    }
}

Вот что у меня сейчас. По-прежнему не работает.

0 голосов
/ 06 июня 2019

В этой статье есть несколько полезных советов по отладке кода, чтобы найти, что идет не так.Вот несколько вещей, которые я заметил:

if (_head == null) {
            _head.setNum(num);
            return;
        }

Поскольку _head здесь null, _head.setNum(num); сгенерирует исключение.Вам нужно указать его на новый узел, вместо этого:

_head = p;

Вы каждый раз меняете заголовок списка:

_head = _head.getNext();

Это кажется проблемой.Как вы узнаете оригинальную главу списка, когда ваш метод закончится?Вместо этого вы должны использовать временную переменную узла, возможно, с именем _curr или чем-то подобным.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...