Удаление не работает, пытаюсь ли я удалить первый, последний или любой средний элемент. Код функции удаления упоминается в pop()
. Но работает функция pop_top()
, которая должна удалять верхние элементы связанного списка.
Я следую простому подходу для удаления элементов в середине, чтобы просто связать предыдущий элемент и следующий элемент желаемого элемент, а затем удалите нужный элемент.
Для удаления первого элемента связанного списка я просто связываю указатель заголовка со следующим элементом и объявляю следующий элемент заголовком, а затем удаляю предыдущий элемент заголовка.
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
struct node {
int data;
node* next;
};
class ll {
node *head = NULL, *tail = NULL;
public:
void push(int x) {
node* temp = new node;
temp->data = x;
temp->next = NULL;
if (head == NULL) {
head = temp;
tail = temp;
} else {
tail->next = temp;
tail = temp;
}
}
void show() {
node* n = head;
while (n != NULL) {
cout << n->data << "\n";
n = n->next;
}
}
void pop(int x) {
node* q = head;
node* p = head->next;
if (q->data == x) {
head = p;
free(q);
} else {
while (p->data != x) {
q = q->next;
p = p->next;
}
if (p->next == NULL) {
q->next = NULL;
free(p);
} else {
q->next = p->next;
free(p);
}
}
}
void pop_top() {
node* p = head;
head = head->next;
free(p);
}
};
int main() {
ll a;
a.push(1);
a.push(2);
a.push(3);
a.push(4);
a.push(5);
a.push(6);
a.pop(4);
return 0;
}