Having Trouble Wrapping my head around how to make these arrays I'm working in Declare and itterate properly

Hello Unity Answers, These last two days I’ve been working on a prototype and i’m almost finished with it but i’ve hit a small snag, basically I’m Having trouble getting my arrays to line up cleanly and properly:

using System.Collections;

public class SphereControl : MonoBehaviour
{
		public int player;
		public float moveSpeed = 10f;
		public float pulseSpeed = 70f;
		private GameObject myController;
		private GameObject[] pastPositions;
		public GameObject[] pulseTargets;
		private int posTrackCounter = 0;
		private int posTrackCounterLimit;
		private GameObject posTracker;
		private int trackerCount = 0;
		private int pulseCount = 0;
		public int trackerCountLimit;
		public bool inControl = true;




		// Use this for initialization
		void Start ()
		{

				//Find the appropriate Controller to follow
				myController = GameObject.FindGameObjectWithTag ("Player" + player);
				//Set the to create a marker every 10th of a second
				posTrackCounterLimit = (GameObject.Find ("Gamemaster").GetComponent<GlobalControl> ().frameRate) / 5;
				//Find the unused marker to create a template for seperate trackers
				posTracker = GameObject.Find ("Position Tracker");
				//Declare Array
				pastPositions = new GameObject[trackerCountLimit+1];
				pulseTargets = new GameObject[trackerCountLimit+1];


		}
	
		// Update is called once per frame
		void Update ()
		{

				if (inControl == true) {
						// Follow the controller stored in myController
						transform.position = Vector3.Lerp (transform.position, myController.transform.position, moveSpeed * Time.deltaTime);
						//Increase the Counter
						posTrackCounter++;
						//Create a marker when the counter goes up
						if (posTrackCounter == posTrackCounterLimit)
							MapPastPositions ();
						//Attack
						if (Input.GetButtonDown ("Fire1")) 
							SwitchToPulseMode();
						
		}
		//Basically, perform the pulse attack when "Fire" is pressed
				if (inControl == false)
						Pulse ();

		}

		void MapPastPositions ()
		{
		
				// Clear the slot in the array to map a new position, used to destroy positions to old to travel too
				Destroy (pastPositions [trackerCount]);
				// Create a marker at current Position
				pastPositions [trackerCount] = (GameObject)Instantiate (posTracker, transform.position, transform.rotation);
				//Reset the counter so that the cycle can count up and loop this method every xFrames
				posTrackCounter = 0;
				// Increase the count of which marker was added so that the array can populate correctly
				trackerCount++;

				// If the Count extends past the range of the arry, set it back to the first space
				if (trackerCount > trackerCountLimit)
						trackerCount = 0;
		}
	
		void Pulse ()
		{

				//Move towards whichever position is the current target
				transform.position = Vector3.MoveTowards (transform.position, pulseTargets [pulseCount].transform.position, pulseSpeed * Time.deltaTime);
				//If the target is reached find a new target
				if (Vector3.Distance (transform.position, pulseTargets [pulseCount].transform.position) < 0.001) {
						pulseCount ++;
				}
				
		
		}

		void SwitchToPulseMode(){
		trackerCount--;
		//fill Pulse targets with pastPositions markers in the correct order to go backwards
		for (int i = 0; i < trackerCountLimit+1; i++) {
			pulseTargets *= pastPositions[trackerCount];*
  •  	trackerCount--;*
    
  •  	// if the back of the array is reached go to the front;*
    
  •  	if (trackerCount < 0)*
    
  •  		trackerCount = trackerCountLimit;*
    
  •  }*
    
  •  inControl = false;*
    
  • }*

}

so here is the code in what is essentially the players avatar, the goal is for the sphere to fly backwards along the path it has just traveled at a high speed, ive run into two main problems,
1.Firstly I wanted to find a way for the sphere to re-order its array so that the last spot it was in is the first it would travel to and then the one before that etc. I was able to solve that one by creating a new array (pulseTargets[])
1. Secondly anytime I would hit the Fire1 button, I would always fly to the oldest marker created and then go along the correct path, I (seemingly) solved that by having trackerCount decrease by 1 when the SwitchToPulseMode() method was executed, this works except for the off chance that the player hits Fire1 when trackerCount=0, giving my an array out of range error. I understand why this is an error, and that arrays cannot have an index of [-1]. So me only being fairly new to C# and this being my first time trying to really utilize arrays, I was wondering if people would be able to point out how to fix my problem and just offer up any pointers on array management that would be helpful when working with them in the future,
thanks for reading and I hope to hear back from someone soon.
-Colin R. Casto

I wanted to find a way for the sphere to re-order its array so that the last spot it was in is the first

private GameObject[] sortEntries(GameObject[] arrayToSort)
{
  int length = arrayToSort.length;  
  GameObject[] result = GameObject[length];
  int resultIndex = length - 1;
  for(int i = 0; i < length; i++)
  {
   result[resultIndex] = arrayToSort*;*

resultIndex–;
}
return result;