Leggere un intero n>0 e un k<n. Costruire una lista L di n numeri interi casuali minori di 50 e stampare la lista. Individuare e stampare tutte le sottoliste di k elementi di L la cui somma sia dispari.

IMPORTANTE: Organizzare il programma in funzioni (una per generare la lista, una per stamparla, una per le sottoliste).

Esempio. Sia n = 9 e k = 3. Supponiamo che venga generata la lista:

15 --> 17 --> 37 --> 27 --> 21 --> 32 --> 5 --> 37 --> 9 --> NULL

allora vengono stampate le seguenti sottoliste di 3 elementi la cui somma è dispari:

15 --> 17 --> 37 -->NULL
17 --> 37 --> 27 -->NULL
37 --> 27 --> 21 -->NULL
5 --> 37 --> 9 -->NULL

Questo è ciò che ho fatto io:
codice:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

struct nodo *crealista();
void stampalista(struct nodo *p);
int sottolistedispari ();
struct nodo{
       int dato;
       struct nodo *next;
};

main()
{
      struct nodo *start, *p, *q;
      start = crealista();
      stampalista (start);
      printf("\n\n\n");
      sottolistedispari();
      system("PAUSE");
      return 0;
}

struct nodo *crealista()
{
       struct nodo *p, *start, *last;
       int i, n, x;
       start = NULL;
       srand(time(NULL));
       printf ("Quanti nodi ha la lista? \n");
       scanf("%d", &n);
       if(n<=0){
                printf("Inserisci un numero di nodi maggiore di zero: \n");
                scanf("%d", &n);
       }
       for(i=0; i<n; i++){
                p = (struct nodo *)malloc(sizeof (struct nodo));
       if(i == 0)
         start = p;
       else
         last->next = p;
         p->dato = rand() % (1) + 25;
         p->next = NULL;
         last = p;
       }
printf("\n\n\n");
return(start);
}

void stampalista(struct nodo *p)
{
     while(p != NULL){
             printf("%d -->", p->dato);
             p = p->next;
     }
printf("NULL \n\n\n");
}

int sottolistedispari ()
{
    struct nodo *p, *start, *last;
    int i, j, k, n, somma;
    printf("Quanti nodi hanno le sottoliste? \n");
    scanf("%d", &k);
    if(k >= n){
         printf("Inserisci un numero di nodi delle sottoliste inferiore a quello della lista: \n");
    }
    
    for(i=0; i<n; i++){
             for(j=n; j<n-k; j++){
                      somma = somma + p;
                      p = p->next;
             }
      if(somma % 2 != 0){
             stampalista(start);
      }
    }
return;
}

Sicuramente ho sbagliato ad effettuare la somma ma non riesco a venirne a capo.
Spero che qualcuno di voi possa aiutarmi...con le liste sono davvero impreparato.
Grazie in anticipo