deque関数を受け取ったキューの先頭を返し、 先頭以外が残るようにしたいのですがご教授お願いいたします。

/* basetypes.c */

#include <stdlib.h>
#include <stdio.h>
#include "basetypes.h"

PCB *pcb_new (int start, int required)
{
  PCB *pcb = (PCB *)malloc(sizeof(PCB));
  pcb->next = NULL;
  pcb->pid = 0;            
  pcb->state = READY;
  pcb->waiting_time = 0;
  pcb->executed_time = 0;
  pcb->start_time = start;     
  pcb->required_time = required; 
  return pcb;
} 

void pcb_enqueue(PCB *pcb, PCB **q)
{
  if (*q == pcb) {
    printf("Failed!!!\n");
    exit(0);
  }
  pcb->next = NULL;
  if (! *q)
    *q = pcb;
  else {
    PCB *p = *q;
    while (p->next != NULL) {
      p = p->next;
    }
    if (p->next == pcb) {
      printf("Failed!!!\n");
      exit(0);
    }
    p->next = pcb;
  }
}

PCB *pcb_dequeue(PCB **q)
{
  PCB *pcb;
  if (! *q)
    return NULL;
  PCB *p = (*q);
  pcb = (*q)->next;
  (*q) = pcb;
  return p;
}

void pcb_print_list(PCB *top)
{
  if (top == NULL) {
    printf("[]");
  }
  else {
    while(top != NULL){
      printf("[pid%d,%d,%d]", top->pid, top->start_time, top->required_time);
      top=top->next;
      if (top)
    printf(", ");
    }
  }
  printf("\n");
}

int main (void)
{
  /* 変数の宣言 */
  PCB *p1 = pcb_new(0, 1);
  PCB *p2 = pcb_new(1, 2);
  PCB *p3 = pcb_new(2, 3);
  PCB *p4 = pcb_new(3, 4);
  PCB *p5 = pcb_new(4, 5);
  PCB *x1;
  /* pcb_enqueue */
  pcb_enqueue(p2, &p1);
  pcb_enqueue(p3, &p1);
  pcb_enqueue(p4, &p1);
  pcb_enqueue(p5, &p1);
  pcb_print_list(p1);
  /* pcb_dequeue */
  x1 = pcb_dequeue(&p1);
  pcb_print_list(x1);
  pcb_print_list(p1);

  return 0;
}

/* basetypes.h */

#define BASETYPES_H
typedef int boolean;
#define true    (1 == 1)
#define false    0

typedef enum { RUNNING, READY, WAITING } Pstate;

/* Process Control Block */
typedef struct PCB {
  struct PCB *next;
  int pid;            /* Process ID */
  Pstate state;            /* joutai */
  int waiting_time;        /* jikkoumachi deno keika jikan */
  int executed_time;        /* jikkou zumi jikan */
  int start_time;        /* seisei jikoku */
  int finished_time;        /* shuryo jikoku */
  int required_time;        /* hituyou jikan */
} PCB;

/* PCB comparing function type */
typedef PCB *(pcb_compare_function)(PCB *, PCB *);

PCB *pcb_new(int, int);
void pcb_enqueue(PCB *, PCB **);
PCB *pcb_dequeue(PCB **);
void pcb_remove(PCB *, PCB **);
void pcb_print_list(PCB*);

int current_clock;