Lista jednokierunkowa uporządkowana - wersja z wartownikiem

Witam. Mam taki problem. Sortowanie listy działa, ale nie mam pojęcia jak zrobić wersję z wartownikiem. Ktoś ma jakiś pomysł?

#include <stdio.h>
#include <stdlib.h>
 
struct el
{
    int klucz;
    struct el *nast;
};
 
typedef struct el elListy;
typedef elListy *lista;
 
void WyswietlListeP( lista _lista )
 {
     lista l = _lista;
    while ( l ){
    printf ("%d->", l->klucz);
    l = l->nast;
              }
    printf ("\n");
 }
 
void DNPL (lista *l, int i) // Dodanie na poczatek listy
{
    lista p=malloc(sizeof(elListy)) ;
    if (i>0) 
    {
        p->klucz=i;
        p->nast=*l;
        *l=p;
    }
    else
    {
        printf("Liczba jest ujemna. Podaj dodatnia:\n", i);
    }
}
 
void swap(int *a, int *b)
{
    int tmp=*a;
    *a=*b;
    *b=tmp;
}
 
void Sortowanie(lista *l)
  {
   lista p,q,s;
   for(s=q=NULL;;s=NULL)
     {
      for(p=*l;p->nast!=q;p=p->nast)
        {
         if(p->klucz>p->nast->klucz)
           {
            swap(&p->klucz, &p->nast->klucz);
            s=p->nast;
           }
        }
      if(!(q=s)) break;
     }
  }
 
int main() 
 {     
     int wybor;
    int liczba;
    struct el *l=0;
    struct el *l1=0;
    struct el *l2=0;
    int i;
 
    printf("[1] Dodanie na poczatek listy\n");
    printf("[2] Wyswietlanie listy z porzadkiem\n");
    printf("[3] Wyswietlanie listy z porzadkiem - wersja z wartownikiem\n");
    printf("[4] Wyswietl liste\n");
    printf("[5] Wyjscie z programu\n");
    do{
    printf("Wybierz: ");
    scanf("%d", &wybor);
    switch(wybor)
        {
        case 1:
            printf("Podaj liczbe: ");
            scanf("%d", &liczba);
            DNPL(&l, liczba);
        break;
        case 2:
            printf("Wyswietlanie listy z porzadkiem\n");
            Sortowanie(&l);
            WyswietlListeP(l);
           break;
           case 3:
            printf("Wyswietlanie listy z porzadkiem - wersja z wartownikiem\n");
           break;
        case 4:
            printf("Wyswietlanie listy od poczatku\n");
            WyswietlListeP(l);
            printf("\n");
        break;
        case 5:
            printf("Wyszedłes z programu!");
            return 0;
        break;
    }
    }while( wybor>=1 );
 
    return 0;
}

Czym jest wartownik w normalnym przypadku? Moim zdaniem jest wartością NULL, a więc zamiast NULL wykorzystujesz wartość jakiejś zmiennej.

Chyba, że chodzi o wartownika nie w liście jednokierunkowej, a np. w tablicy.