Mastering linked Lists
Linked List pointers
Is Sorted
Dans l’exercice IsSorted, on vous demande d’écrire une fonction isSorted
qui reçoit un pointeur sur une noeud d’une
liste qui représente le head d’une liste chainée. Votre fonction doit
renvoyer un booléen qui indique si cette liste chainée est triée ou non.
struct ListNode {
int data; //valeur dans chaque noeud
ListNode *next; // pointeur sur le noeud suivant
}
DoubleIt
Dans l’exercice doubleIt, on vous demande d’écrire une fonction doubleList
qui reçoit un pointeur sur le head
d’une liste chainée et qui ajoute une copie de cette chaine a la fin de celle ci.
Par exemple si la chaine est
{ 1, 35, 28, 7}
alors l’appel doubleList(front)
modifiera la liste en:
{ 1, 35, 28, 7, 1 , 35, 28, 7}
Contraintes
- Vous ne pouvez pas utiliser des structure de donnes comme un vecteur ou un string.
- Au maximum vous devez créer \(N\) noeuds u \(N\) est le nombre de neouds de la liste originale.
Expand
Dans l’exercice
expand,
on vous demande d’écrire une fonction expand
qui reçoit une référence sur
un pointeur ListNode
représentant la début d’une liste chainée et un paramètre
\(k\). Cette fonction doit remplacer chaque noeud par \(k\) copies avec une
valeur \(\dfrac{v}{k}\).
Par exemple, supposons que la liste initiale est
{12, 34, -8, 3, 46}
l’appel expand(L, 2)
changera la liste en
{6, 6, 17, 17, -4, -4, 1. 1, 23, 23}
Si par exemple, on avait execute expand(L, 3)
, on aura alors:
{4, 4, 4, 11, 11, 11, -2, -2, -2, 1, 1, 1, 15, 15, 15}
- Si une liste est vide, elle restera vide.
- Si \(k\) est négatif, lancer une exception.
- Si \(k=0\), détruire toute la chaine.
Classic problems
Reverse
Le problème
reverse, vous demande d’écrire une fonction reverse
qui reçoit une référence sur un pointeur ListNode et qui renverse l’ordre de cette liste.
Par exemple l’appel sur la liste {1, 8, 19, 4, 17}
changera la liste en {17,
4, 19, 8, 1}
.
Split
Finalement, dans
partition sort, on vous demande d’écrire une fonction split
qui accepte une référence sur un pointeur NodeList et réarrange les éléments de cette liste entre nombres positifs et négatifs.
Par exempple, supposons que la liste est
{8, 7, -4, 19, 0, 43, -8, -7, 2}
Apres l’appel, la liste deviendra
{-7, -8, -4, 8, 7, 19, 0, 43, 2}
- Remarquer que les nombres positifs garde leur ordre d’apparition.
- Contrairement, l’ordre d’apparition des nombres négatifs est inverse.