Как объединить два двусвязных списка (Доступ к следующей ссылке) - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь объединить два дважды связанных списка. Я уже создал функцию, которая вставляет новый узел и в правильном порядке. Параметры установлены моим профессором, поэтому я не могу их изменить. Я могу добавить первый элемент в List1, но не могу добавить больше.

Я получаю ошибки при попытке продолжить просмотр списка List2 и добавить дополнительные элементы в список List1. Я пробовал рекурсию и цикл do while. При попытке использовать цикл do-while

struct nodeType{
int info;
nodeType *next;
nodeType *back;
};

class OrderedDoublyLinkedList{
public:
    //Insert x in appropriate place in the list to keep it 
    sorted
    void insertNode(int x);
    void mergeLists(OrderedDoublyLinkedList &List1, 
    OrderedDoublyLinkedList &List2);

private:
    int count;
    nodeType *first;
    nodeType *last;
};

void 
OrderedDoublyLinkedList::mergeLists(OrderedDoublyLinkedList 
&List1, OrderedDoublyLinkedList &List2){

//First Technique
do{
    List1.insertNode(List2.first->info);
    List2.first->next; //Error: Expresion result unused
}
while(List2.first!=NULL)

//Second Technique
while(List2.first!=NULL)
    List1.insertNode(List2.first->info);
    mergeLists(&List1, &List2.first->next);
//If I try to use this it says cannot bind to a temporary of 
type

Мне нужна помощь при доступе к следующему узлу, чтобы добавить остальную информацию в List1.

1 Ответ

1 голос
/ 07 июля 2019

Выглядит как простой цикл while - все, что вам нужно

nodeType* n = List2.first;
while (n != NULL)
{
    List1.insertNode(n->info);
    n = n->next;
}

Хотя я все еще волнуюсь, является ли это приемлемым решением. Вы сказали, что вам нужно переместить List2 в List1, и это не то, что делает этот код. Этот код копирует List2 в List1, List2 не зависит от этого кода.

...