How to load list after removals?

Hello, I have a script that saves & loads a list of strings with playerprefs, but if elements is removed from the list & I press a button to save the new list, & I reload the scene again it comes back with the same list of strings including the ones that were removed. I don’t know what to do about solving this issue.

public List<string> Names = new List<string>();

void Start()
{
    for (int i = 0; PlayerPrefs.HasKey("SaveName" + i); i++)
    { 
        Names.Add(PlayerPrefs.GetString("SaveName" + i));
    }
}


public void Save()
{ 
    for (int i = 0; i < Names.Count; i++)
    {
        PlayerPrefs.SetString("SaveName" + i, Names*);*

Debug.Log(Names*.ToString());*
}
}

Solution 1

     public List<string> Names = new List<string>();
     void Start()
     {
         Load();
     }

    public void AddName(string name)
{
Names.Add(name);
int index = listofelements.IndexOf(name);
PlayerPrefs.SetString("SaveName" + index, Names*);*

}

public void RemoveName(string name)
{
int index = listofelements.IndexOf(name);
if(index != -1)
{
Names.Remove(name);
PlayerPrefs.DeleteKey(“SaveName” + index, name);
}
}

public void ModifyName(string name, string newname)
{
int index = listofelements.IndexOf(name);
if(index != -1)
{
listofelements[index] = newname;
PlayerPrefs.SetString(“SaveName” + index, newname);
}
}
public void ModifyName(int index, string newname)
{
listofelements[index] = newname;
PlayerPrefs.SetString(“SaveName” + index, newname);
}

//save each time something change in the list
public void SaveAll()
{
for (int i = 0; i < Names.Count; i++)
{
PlayerPrefs.SetString(“SaveName” + i, Names*);*
Debug.Log(Names*.ToString());*
}
}
//call each time you want to load all names from player prefs (will //replace your list
public void LoadAll()
{
Names = new List();
for (int i = 0; PlayerPrefs.HasKey(“SaveName” + i); i++)
{
Names.Add(PlayerPrefs.GetString(“SaveName” + i));
}
}
//call each time you want to load without adding new one
public void Load()
{
for (int i = 0; PlayerPrefs.HasKey(“SaveName” + i); i++)
{
if(Names.contains(PlayerPrefs.GetString(“SaveName” + i)))
Names = PlayerPrefs.GetString(“SaveName” + i);
else
Names.Add(PlayerPrefs.GetString(“SaveName” + i));
}
}

Solution 2
public List Names = new List();
void Start()
{
Load();
}

//save each time something change in the list
public void Save()
{
for (int i = 0; i < Names.Count; i++)
{
PlayerPrefs.SetString(“SaveName” + i, Names*);*
Debug.Log(Names*.ToString());*
}
}
//call each time you want to load
public void Load()
{
Names = new List();
for (int i = 0; PlayerPrefs.HasKey(“SaveName” + i); i++)
{
Names.Add(PlayerPrefs.GetString(“SaveName” + i));
}
}