List
La façon la plus simple (pour un List
) est d'utiliser :
int first = list[0];
list.RemoveAt(0);
list.Add(first);
Les performances sont mauvaises cependant - O(n).
Array
C'est essentiellement équivalent à la version List
, mais plus manuel :
int first = array[0];
Array.Copy(array, 1, array, 0, array.Length - 1);
array[array.Length - 1] = first;
LinkedList
Si vous pouviez utiliser une LinkedList
à la place, ce serait beaucoup plus simple :
int first = linkedList.First;
linkedList.RemoveFirst();
linkedList.AddLast(first);
Ceci est O(1) car chaque opération est en temps constant.
Queue
La solution de cadrell0 utilisant une file d'attente est une seule déclaration, car Dequeue
supprime l'élément et le retourne :
queue.Enqueue(queue.Dequeue());
Je ne trouve aucune documentation sur les caractéristiques de performances de ceci, je m'attends à ce que Queue
soit implémenté en utilisant un tableau et un index comme "point de départ virtuel" - dans ce cas, c'est une autre solution O(1).
Remarquez que dans tous ces cas, vous voudriez vérifier d'abord si la liste est vide. (Vous pourriez considérer cela comme une erreur, ou une opération nulle.)
16 votes
Vous pourriez le mettre en œuvre sous forme de file. Défilez et Enfilez la même valeur.
1 votes
Est-ce qu'une solution en tableau est acceptable ?
0 votes
Je veux une liste, plus souple, Array sur since ToList est très pratique