Cho phép thêm phần tử vào sau p của danh sách liên kết đơn

Mn ơi , mn giúp em với , em có để bài là : Bổ sung chương trình mẫu cho phép thêm phần tử vào sau p(tham số truyền vào là 1 con trỏ) danh sách liên kết đơn một giá trị nguyên

em thử cả buổi rồi mà vẫn không được , mn giúp em với, phần void InsertAfter trong linkedlist.h ấy ạ , em cảm ơn

main.cpp

#include <iostream>
#include "linkedlist.h"
using namespace std;
int main()
{
  linkedlist *list1 = new linkedlist();
  element *e;
  e = new element(9);
  list1->InsertTail(e);
  e = new element(10);
  list1->InsertTail(e);
  e = new element(8);
  list1->InsertTail(e);
  e = new element(11);
  list1->InsertTail(e);
  list1->Travel();
  list1->DeleteFirst();
  cout<<"\n";
  list1->Travel();
  cout<<"\n";
  element *p = new element(8);
  //cout<<p->GetData()<<"\n";
  list1->InsertAfter(p,111);
  list1->Travel();
  delete list1;
  // cout<<list1->CountList();
}

element.h

#pragma once
class element
{
  private:
    int data;
    element *pointer;
  public:
    element()
    {
      data = 0;
      pointer = nullptr;
    }
    element(int a)
    {
      data = a;
      pointer = nullptr;
    }
    virtual ~element() {};
    int GetData() { return data; }
    void SetData(int val) { data=val; }
    element *GetPointer() { return pointer; }
    void SetPointer(element *val) { pointer=val; }
};

linkedlist.h

#pragma once
#include <iostream>
#include "element.h"
using namespace std;
class linkedlist
{
  private:
    element *head;
    element *tail;
    int num = 0;
  public:
    linkedlist()
    {
      head = NULL;
      tail = NULL;
    }
    virtual ~linkedlist();
    element *Gethead() { return head; }
    void SetHead(element *val) { head = val; }
    element *GetTail() { return tail; }
    void SetTail(element *val) { tail = val; }
    void InsertHead(element *e)
    {
      if (head == NULL ) head = tail = e;
      else
      {
        e->SetPointer(head);
        head = e;
      }
      num++;
    }
    void InsertTail(element *e)
    {
      if (head == NULL) head = tail = e;
      else
      {
        tail->SetPointer(e);
        tail = e;
      }
      num++;
    }
    void Travel()
    {
      element *p = head;
      while (p != NULL)
        {
          cout<<p->GetData()<<"\t";
          p = p->GetPointer();
        }
    }
    bool DeleteFirst()
    {
      if (head == NULL) return false;
      else
      {
        element *p = head;
        head = head->GetPointer();
        delete p;
        return true;
      }
    }
    void RemoveAll()
    {
      while (head != NULL)
        {
          element *p = head;
          head = head->GetPointer();
          delete p;
        }
    }
    int SumList()
    {
      int t = 0;
      while (head != NULL)
        {
          element *p = head;
          head = head->GetPointer();
          t += p->GetData();
        }
      return t;
    }
    int MaxList()
    {
      int max = head->GetData();
      head = head->GetPointer();
      while (head != NULL)
        {
          element *p = head;
          head = head->GetPointer();
          if (max < p->GetData()) max = p->GetData();
        }
      return max;
    }
    int CountList()
    {
      int t = 0;
      while (head != NULL)
        {
          t++;
          head = head->GetPointer();
        }
      return t;
    }
    void InsertAfter(element *p, int data)
    {
      if (p == NULL)
      {
        cout<<"ERROR";
        return;
      }
      element *e = new element(data);
      e->SetPointer(p->GetPointer());
      p->SetPointer(e);
    }
};
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?