how can i avoid objects spawning on the same Spawn points twice in a row

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WaveSpawner : MonoBehaviour
{
public enum SpawnState {Spawning, Waiting, Counting}

[System.Serializable]
public class Wave
{
    public string name;
    public Transform enemy;
    public Transform hostage;
    public int count;
    public int hostageCount;
    public float rate;
}

public Wave[] waves;
private int nextWave = 0;

public Transform [] spawnPoints;

public float timeBetweenWaves = 5f;
public float waveCountdown;

private float searchCoundown = 1f;

private SpawnState state = SpawnState.Counting;

// Start is called before the first frame update
void Start()
{
    waveCountdown = timeBetweenWaves;
    if(spawnPoints.Length == 0)
    {
        Debug.LogError("No spawn points referenced");
    }
}

// Update is called once per frame
void Update()
{
    if (state == SpawnState.Waiting)
    {
        //Check if enemies are still alive
        if(!EnemyIsAlive())
        {
            //Begin a new round
            WaveCompleted();
        }
        else
        {
            return;
        }
    }

    if(waveCountdown <= 0)
    {
        if(state != SpawnState.Spawning)
        {
            //Start spawning wave
            StartCoroutine(SpawnWave (waves[nextWave]));
        }
    }
    else 
    {
        waveCountdown -= Time.deltaTime;
    }
}

void WaveCompleted()
{
    Debug.Log("Wave Completed");

    state = SpawnState.Counting;
    waveCountdown = timeBetweenWaves;

    if(nextWave + 1 > waves.Length -1)
    {
        nextWave = 0;
        Debug.Log("ALL WAVES COMPLETE! Looping...");
    }
    else
    {
        nextWave++; 
    }
}
bool EnemyIsAlive()
{
    searchCoundown -= Time.deltaTime;
    if(searchCoundown <= 0f)
    {
        searchCoundown = 1f;
        if(GameObject.FindGameObjectWithTag("Enemy") == null)
        {
            return false;
        }
    }
    return true;
}

IEnumerator SpawnWave (Wave _wave)
{
    Debug.Log("Spawning Wave: " + _wave.name);
    state = SpawnState.Spawning;

    //Spawn
    for(int i = 0; i < _wave.count; i++)
    {
        SpawnEnemy(_wave.enemy);
        yield return new WaitForSeconds(1f/_wave.rate); //wait for x seconds
    }
    for(int i = 0; i < _wave.hostageCount; i++)
    {
        SpawnEnemy(_wave.hostage);
       // yield return new WaitForSeconds(1f/_wave.rate); //wait for x seconds
    }

    state = SpawnState.Waiting;
    Debug.Log("Waiting");
    yield break;
}

void SpawnEnemy (Transform _enemy)
{
    Debug.Log("Spawning Enemy: " + _enemy.name);

    Transform _sp = spawnPoints[Random.Range (0, spawnPoints.Length)];
    Instantiate(_enemy, _sp.position, _sp.rotation);
}

}

You can store the last spawn points in a dictionary then call Dictionary.Contains() to see if that spawn point was already used.