удаление элемента из стека по индексу

необходимо удалить из стека элемент с указанием индекса, получается лишь сделать чтобы удалялись все элементы до индексированного элемента, помогите исправить.

#include "pch.h"
#include <stdio.h>
#include <iostream>
#include <Windows.h>

using namespace std;
struct node {
    int x; 
    struct node* next;
};
typedef struct node *Node_ptr;
Node_ptr Add(int n)//создание стека
{
    Node_ptr p = NULL, pred = NULL;
    cout << "Введите элементы стека: \n";
    int m;
    for (int i = 0; i < n; i++)
    {
        p = new struct node;
        cin >> m;
        p->x= m;
        p->next = pred;
        pred = p;
        m = 0;
    }
    return p;
} 
void Show(Node_ptr p) //просмотр стека
{
    cout << "Вывод стека: ";
    Node_ptr y = p;
    while (y != NULL) 
    {
        cout << y->x << " "; y = y->next;
    }
    cout << endl;
}

void delete3(node *&N, int f)  //удаление по индексу
{   
    for (int i = 0; i < f; i++)
    {
        node *temp = N;
        N = N->next;
        delete temp;
    }
    
    cout << "\nЛишние значения удалены!" << endl;   
}

int main()
{
    setlocale(LC_ALL, "Russian");
    Node_ptr a = Add(5); 
    Show(a);
    delete3(a,2);
    Show(a);    
    system("pause");
}

Ответы (1 шт):

Автор решения: KoVadim

С классического стека так удалить нельзя. Но это можно сделать по другому (может и не так эффективно).

Просто создаете ещё один стек и перекладываете туда элементы, пока не найдете нужный индекс. Вот его уже не нужно. А потом с вспомогательного стека назад в основной. Правда нужно реализовать функцию pop:)

Ваша же функция delete пытается удалить все элементы до заданного индекса.

P.S. если что - в коде не плюсы, а чистый почти си.

→ Ссылка