Невозможно удалить узлы из связанного списка в C ++ - PullRequest
0 голосов
/ 15 апреля 2020

Удаление не работает, пытаюсь ли я удалить первый, последний или любой средний элемент. Код функции удаления упоминается в 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...