Добавление узлов по значению - PullRequest
1 голос
/ 14 мая 2019

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

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

        public void AddOrdered(int value)
    {
        LinkedListNode nodeToAdd = new LinkedListNode(value);
        LinkedListNode cur = m_first;
        if (m_first == null) 
            m_first = nodeToAdd;//new LinkedListNode(value);

        else if (nodeToAdd.m_data < m_first.m_data) 
        {
            AddAtFront(value);
        }
        else if (nodeToAdd.m_data < cur.m_next.m_data) 
        {
            LinkedListNode temp = new LinkedListNode(value);
            temp = m_first.m_next;
            m_first.m_next = nodeToAdd;
            nodeToAdd.m_next = temp;
        }
        else
        {
            AddAtEnd(value);
        }
    }

дополнение add в конце / front методы - которые работают нормально

        public void AddAtEnd(int value)
    {
        LinkedListNode cur = m_first;
        if (m_first == null)
        {
            LinkedListNode lnl = new LinkedListNode(value);
            m_first = lnl;
        }
        while (cur.m_next != null)
        {
            cur = cur.m_next;
        }
        cur.m_next = new LinkedListNode(value);
    }

        public void AddAtFront(int value)
    {
        if (m_first == null) 
        {
            LinkedListNode ln = new LinkedListNode(value);
            m_first = ln;
        }
        else
        {
            LinkedListNode lnl = new LinkedListNode(value); 
            lnl.m_next = m_first;                           
            m_first = lnl;                                 
        }
    }

Значения должны добавляться по порядку, но выходные данные помещают их в самый конец связанного списка, если в качестве значений не введены новые минимальные / максимальные значения.

1 Ответ

1 голос
/ 14 мая 2019

Сначала я предполагаю, что m_first - ваш первый узел.При этом в качестве предположения код будет следующим:

public void AddOrdered(int value)
    {
        LinkedListNode nodeToAdd = new LinkedListNode(value);
        LinkedListNode cur;
        if (m_first == null || m_first.data >= nodeToAdd.data)
        {
            nodeToAdd.next = m_first;
            m_first = nodeToAdd;
        }
        else
        {
            cur = m_first;
            while (cur.next != null &&
            cur.next.data < nodeToAdd.data)
                cur = cur.next;

            nodeToAdd.next = cur.next;
            cur.next = nodeToAdd;
        }
    }
...