#include <iostream> using namespace std; struct Point { int x; int y; }; struct PointList { Point p; int num; PointList* pNext; }; //自己参照構造体 void PrintDat(const PointList& _pl) { cout << "(" << _pl.p.x << "," << _pl.p.y << ") : num = " << _pl.num << endl; if (_pl.pNext == nullptr) cout << "pNext:nullptr" << endl; } void PrintDat(PointList* _pl) { cout << "(" << _pl->p.x << "," << _pl->p.y << ") : num = " << _pl->num << endl; if (_pl->pNext == nullptr) cout << "pNext:nullptr" << endl; } int main() { //PointList dat{ {10, 15}, 1, nullptr }; //PrintDat(dat); //PointList* pDat = nullptr; //pDat = new PointList{ {1, 2}, 2, nullptr };//ここで実体ができるよ //PrintDat(pDat); //dat.pNext = pDat; //cout << "pDatつないだ後" << endl; //PrintDat(dat); //PrintDat(dat.pNext); //pDat = new PointList{ {3, 4}, 3, nullptr };//ここで実体ができるよ //dat.pNext->pNext = pDat; //cout << "pDatもう一回つないだ後" << endl; //PrintDat(dat); //PrintDat(dat.pNext); //PrintDat(dat.pNext->pNext); int n = 0; //データが10個になるまでりすとを連続で作ってつなぐ PointList* pDat = nullptr; PointList* Head = nullptr; PointList* pPrev = nullptr; while (n<5) { if (pDat != nullptr) pPrev = pDat; pDat = new PointList{ {-1, -1}, -1, nullptr }; Point tmpP; cout << n + 1 << "個目のデータ:x,yを入力" << endl; cin >> tmpP.x >> tmpP.y; pDat->p = tmpP; pDat->num = n + 1; if (n == 0) Head = pDat; else pPrev->pNext = pDat; //○○が入力されるまでリストをずっとつなげる n++; } PointList* p = Head; while (p != nullptr) { PrintDat(p); p = p->pNext; } p = Head; PointList* pMae = nullptr; while (p != nullptr) { //PrintDat(p); if (p->num == 3)//消す { pMae->pNext = p->pNext; pMae = p; p = pMae->pNext; } else { pMae = p; p = p->pNext; } } p = Head; while (p != nullptr) { PrintDat(p); p = p->pNext; } //PrintDat(Head); //PrintDat(Head->pNext); //PrintDat(Head->pNext->pNext); //PrintDat(Head->pNext->pNext->pNext); //PrintDat(Head->pNext->pNext->pNext->pNext); //PrintDat(Head->pNext->pNext->pNext->pNext->pNext); //PrintDat(Head->pNext->pNext->pNext->pNext->pNext->pNext); //PrintDat(Head->pNext->pNext->pNext->pNext->pNext->pNext->pNext); //PrintDat(Head->pNext->pNext->pNext->pNext->pNext->pNext->pNext->pNext); //PrintDat(Head->pNext->pNext->pNext->pNext->pNext->pNext->pNext->pNext->pNext); return 0; }