在牛客网上写题遇到的问题

在牛客网上写题目遇到的问题

img

img


img

#include <stdio.h>
#include <malloc.h>
typedef struct linkList
{
    int data;
    struct linkList * next;
    struct linkList * prior;
}LNode,*LinkList;
LNode* traverse(LinkList L,int x)
{
    LNode* p=L;
    while(p->data!=x&&p->next!=NULL)
    {
        p=p->next;
    }
    return p;
}
void insert(LinkList L,int x,int y)
{
    LNode* p;
    LNode* q;
    q=(LNode*)malloc(sizeof(LNode));
    q->next=NULL;
    q->prior=NULL;
    p=traverse(L,x);
    if(p->next==NULL&&p->data!=x)
    {
        q->next=NULL;
        q->data=y;
        q->prior=p;
        p->next=q;
    }
    else
    {
        q->next=p;
        p->prior->next=q;
        q->prior=p->prior;
        p->prior=q;
        q->data=y;
    }
}
void delete(LinkList L, int x)
{
    LNode * p;
    p=traverse(L,x); 
    if(p->next==NULL&&p->data!=x) 
        return;
    else if(p->next==NULL)
    {
        p->prior->next=p->next;
        free(p);
    }
    else 
    { 
        p->prior->next=p->next;
        p->next->prior=p->prior; 
        free(p); 
    } 
}
int main() 
{
    int n,x,y;
    char oper[10];
    LinkList L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
    L->prior=NULL;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%s",oper);
        if(oper[0]=='i')
        {
            scanf("%d%d",&x,&y);
            insert(L,x,y);
        }
        else
        {
            scanf("%d",&x);
            delete(L,x);
        }
    }
    LNode* p=L;
    if(L->next==NULL)
        printf("NULL");
    while(p->next!=NULL)
    {
        p=p->next;
        printf("%d ",p->data);
    }
    return 0;
}

似乎递归进入死循环了吧,导致内存溢出,插入少量的数据,debug跟踪一下看看情况