Прежде чем вы прочитаете это, я новичок в c ++ , приветствуется любая обратная связь, просто не стесняйтесь sh пожалуйста: (
Так что в основном я добавляю элементы в список с двумя связями, и в функции ниже моя цель состоит в том, чтобы взять его элементы, добавить их в мой список с односвязными связями и вернуть его, однако я просто возвращаю указатель на список.
Я просто застрял в этом небольшая проблема,
Когда я возвращаю его, он дает мне адрес, я делаю что-то не так в функции, я просто могу это указать, остальная часть кода работает со мной нормально. Надеюсь Я поставил свой вопрос правильно, спросите меня по-другому. Любая помощь очень ценится.
template <class Type>
SinglyLinkedList<Type> *DoublyLinkedList<Type>:: Function() {
SinglyLinkedList<Type>* newList = new SinglyLinkedList<Type>();
nodeDLL<Type>* p = head2;
//I added the values from the doubly linked list into the singly linked list
while (p !=NULL) {
newList->addToHead(p->value2);
p=p->next2;
}
// I used the print function to make sure the above works and it works the way I want,
newList->print();
// but when I return it here it gives me an address?
return newList;
Для справки здесь остальная часть кода:
класс для Узел односвязного списка
template <class Type>
class nodeSLL {
public:
nodeSLL* next;
Type value;
nodeSLL(Type v, nodeSLL* n) {
value = v;
next = n;
}
~nodeSLL() {
cout << "node destroyed" << endl;
}
};
Класс односвязного списка
template <class Type>
class SinglyLinkedList {
public:
nodeSLL<Type>* head;
nodeSLL<Type>* tail;
SingyLinkedList();
SinglyLinkedList(SinglyLinkedList<Type> &obj);
void addToHead(Type v);
void addToTail(Type v);
void print();
~SinglyLinkedList();
};
template <class Type>
SinglyLinkedList<Type>::SinglyLinkedList(const SinglyLinkedList &obj) // Copy Constructor
{
head = obj.head;
tail = obj.tail;
}
template <class Type>
SinglyLinkedList<Type>:: SinglyLinkedList() {
head = tail = NULL;
}
template <class Type>
SinglyLinkedList<Type>:: ~SinglyLinkedList() {
nodeSLL<Type> *p = head;
while (p != NULL) {
head = head->next;
delete p;
p = head;
}
}
функция печати
template <class Type>
void SinglyLinkedList<Type>:: print() {
nodeSLL<Type> * t = head;
while (t != NULL) {
cout << t->value << " => ";
t = t->next;
}
cout << " NULL"<< endl;
}
добавить в голову function
template <class Type>
void SinglyLinkedList<Type>:: addToHead(Type v) {
nodeLL<Type> *newNode = new nodeSLL<Type>(v, head);
if (head == NULL) {
head = tail = newNode;
} else {
head = newNode;
}
Узел двусвязного списка
template <class Type>
class nodeDLL {
public:
nodeDLL* next2;
nodeDLL* prev2;
Type value2;
nodeDLL<Type>(nodeDLL<Type>* prv, Type v, nodeDLL<Type>* n) {
value2 = v;
next2 = n;
prev2 = prv;
}
~nodeDLL() {
prev2 = next2 = NULL;
cout << "node destroyed" << endl;
}
};
Дважды li nked list class
template <class Type>
class DoublyLinkedList {
public:
nodeDLL<Type>*head2;
nodeDLL<Type>*tail2;
DounlyLinkedList();
void addToHead2(Type v);
void Clear();
~DoublyLinkedList();
};
Добавить в голову двусвязный список
template <class Type>
void DoublyLinkedList<T>:: addToHead2(Type v) {
nodeDLL<T>* newNode = new nodeDLL<Type>(NULL, v, head2);
if (head2 == NULL) {
head2 = tail2 = newNode;
}
else {
head2->prev2 = newNode;
head2 = newNode;
}
}
Основная функция
int main()
{
SinglyLinkedList<int>* list1;
DoublyLinkedList<int> lists;
lists.addToHead2(55);
lists.addToHead2(87);
lists.addToHead2(2);
//list1 = lists.Function();
cout <<lists.Function();
return 0;
}