为什么不能输出结果。


#include"stdio.h"
#include"stdlib.h"
typedef struct linklist
{
    int date;
    linklist *next,*pre;
 } linklist;
  void csh(linklist **head)
  {
      *head=new linklist;
      (*head)->next=(*head)->pre=(*head);
  }
  void cread(linklist *head,int n)
  {
      linklist *p,*q=head; 
    printf("请输入链表内容\n"); 
      while(n--)
      {
      p=new linklist;
    scanf("%d",&p->date);
    q->next=p;
    p->pre=q;
    q->next=head;//尾插法 
    head->pre=p;
    q=p;//p用于记录头结点前一个结点 
       } 
  }
  void printflinklist(linklist *head)
  {
      linklist *p=head->next;
      while(p!=head)
      {
          printf("%d\t",p->date);
          p=p->next;
      }
   } 
 int main()
 {
     linklist *head;
     int n;
     printf("请输入链表长度\n");
     scanf("%d",&n);
    csh(&head);
    cread(head,n);
    printflinklist(head); 
  }

是双向链表?void cread()函数这么改:

void cread(linklist *head,int n)
{
    linklist *p,*q=head;
    printf("请输入链表内容\n");
    while(n--)
    {
      p=new linklist;
      p->next = NULL;  //修改
      scanf("%d",&p->date);
      q->next=p;
      p->pre=q;
      //q->next=head;//尾插法
      //head->pre=p;
      q=p;//p用于记录头结点前一个结点
    }
}
void printflinklist(linklist *head)
{
      linklist *p=head->next;
      while(p!=NULL)  //(p!=head)
      {
          printf("%d\t",p->date);
          p=p->next;
      }
}