Я использую указатели в первый раз. У меня есть программа, которая вставляет числа в связанный список, печатает список и удаляет определенные числа из списка. Он работает, за исключением случаев, когда я пытаюсь удалить номер, который был вставлен последним.Как удалить последний элемент, добавленный в связанный список в C++
node.h
#ifndef Node_h
#define Node_h
#include <iostream>
using namespace std;
class Node
{
public:
int data;
Node *next;
public:
Node();
};
#endif
node.cpp
#include "Node.h"
Node::Node()
{
}
LinkedList.h
#ifndef LinkedList_h
#define LinkedList_h
#include "Node.h"
class LinkedList
{
private:
Node *pL;
public:
LinkedList();
void insert(int nr1);
void deleteNr(int nr1);
void printL();
};
#endif
LinkedList.cpp // Эта программа создает "связанный список" от числа
#include "LinkedList.h"
LinkedList::LinkedList()
{
pL = NULL;
}
void LinkedList::insert(int nr1)
{
Node *p = new Node;
p->data = nr1;
p->next = pL;
pL = p;
}
void LinkedList::deleteNr(int nr1)
{
Node *p = pL;
Node *p2 = pL;
while (p != NULL & p->data != nr1)
{
p2 = p;
p = p->next;
}
if (p != NULL)
{
p2->next = p->next;
delete p;
}
}
void LinkedList::printL()
{
Node *p = pL;
while (p != NULL)
{
cout << p->data << "-> ";
p = p->next;
}
}
main.cpp
#include "LinkedList.h"
int menu();
//////// main /////////
int main()
{
int choice1, nr1;
LinkedList lk1;
choice1 = menu();
while (choice1 <= 3)
{
if (choice1 == 1)
{
cout << "Enter number." << endl;
cin >> nr1;
lk1.insert(nr1);
}
else if (choice1 == 2)
{
cout << "Enter number." << endl;
cin >> nr1;
lk1.deleteNr(nr1);
}
else if (choice1 == 3)
{
lk1.printL();
cout << endl << endl;
}
else if (choice1 == 4)
{
cout << "Exit the program." << endl;
system("pause");
exit(1);
}
choice1 = menu();
} // end while loop
}
int menu()
{
int choice1;
cout << "1. Insert a number into the linked-list." << endl;
cout << "2. Delete a number from the linked-list." << endl;
cout << "3. Print the linked-list." << endl;
cout << "4. Exit the program." << endl;
cout << "Enter choice." << endl;
cin >> choice1;
return choice1;
}
Домашнее задание? Что происходит, когда вы пытаетесь удалить последний вставленный элемент? – Alex
Да, это домашнее задание. Когда я пытаюсь удалить последний вставленный элемент, он сработает. – user3254558
Просто обратите внимание, что в вашей функции удаления у вас есть '&' где это должно быть '&&'. Они делают разные вещи. – Daniel