预定程序员 2023-01-28 19:24 采纳率: 68.3%
浏览 47
已结题

删除函数(子函数)调用后,为什么没有运行结果

问题:(双链表建表输入输出都正常),sc函数调用后,却没有输出结果,相当于最后四行不运行,为什么?
题目:有一个非空双链表L,设计一个算法删除第一个值为x的节点


#include<stdio.h>
#include<malloc.h>
typedef int EleType;
typedef struct DLnode
{
    int data;
    struct DLnode *next;
    struct DLnode *prior;
}DLinkNode;
void InitList(DLinkNode *&L)
{
    L=(DLinkNode *)malloc(sizeof(DLinkNode));
    L->next=L->prior=NULL; 
}
void CreatList(DLinkNode *&L,int a[],int n)
{
    DLinkNode *p,*r;
    L=(DLinkNode *)malloc(sizeof(DLinkNode));
    r=L;
    for(int i=0;i<n;i++)
    {
        p=(DLinkNode *)malloc(sizeof(DLinkNode));
        p->data=a[i];
        r->next=p;
        r=p;
    }
    r->next=NULL;
}
void DispList(DLinkNode *L)
{
    DLinkNode *p=L->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
} 
bool sc(DLinkNode *L,int x)
{
    int i=0;
    DLinkNode *p=L->next,*q;
    while(p!=NULL&&p->data!=x)
    {
        p=p->next;
    }
    if(p==NULL)
      return false;
    else
    {
      q=p->next;
      if(q!=NULL)
        q->prior=p->prior;
      p->prior->next=q;
      free(p);
      return true;    
    }
} 
int main()
{
    DLinkNode *L;
    int a[7];
    InitList(L);
    printf("请输入:");
    for(int i=0;i<7;i++)
    {
        scanf("%d",&a[i]);
    }
    CreatList(L,a,7);
    printf("请输出:");
    DispList(L);
    sc(L,3);
    printf("删除后请输出:");
    DispList(L);
    return 0;
}

img

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-01-28 21:49
    关注

    修改完善如下,改动处见注释,供参考:

    #include<stdio.h>
    #include<malloc.h>
    typedef int EleType;
    typedef struct DLnode
    {
        int data;
        struct DLnode *next;
        struct DLnode *prior;
    }DLinkNode;
    void InitList(DLinkNode *&L)
    {
        L=(DLinkNode *)malloc(sizeof(DLinkNode));
        L->next=L->prior=NULL;
    }
    void CreatList(DLinkNode *&L,int a[],int n)
    {
        DLinkNode *p,*r;
        //L=(DLinkNode *)malloc(sizeof(DLinkNode)); 修改 L已经初始化了,这句就多余了。
        r=L;
        for(int i=0;i<n;i++)
        {
            p=(DLinkNode *)malloc(sizeof(DLinkNode));
            p->data=a[i];
            p->next=NULL; //修改
            p->prior=r;   //修改
            r->next=p;
            r=p;
        }
        //r->next=NULL;   修改
    }
    void DispList(DLinkNode *L)
    {
        DLinkNode *p=L->next,*q=NULL;//修改
        while(p!=NULL)
        {
            q=p;                     //修改
            printf("%d ",p->data);
            p=p->next;
        }
        printf("\n");                //修改
                    
        while(q != L){               //修改 反向
            printf("%d ",q->data);   //修改
            q=q->prior;              //修改
        }
        printf("\n");                //修改
    } 
    bool sc(DLinkNode *L,int x)
    {
        int i=0;
        DLinkNode *p=L->next,*q;
        while(p!=NULL && p->data!=x)
        {
            p=p->next;
        }
        if(p == NULL)
          return false;
        else
        {
          q=p->next;
          if(q!=NULL)
            q->prior=p->prior;
          p->prior->next=q;
          free(p);
          return true;    
        }
    } 
    int main()
    {
        DLinkNode *L;
        int a[7];
        InitList(L);
        printf("请输入:");
        for(int i=0;i<7;i++)
        {
            scanf("%d",&a[i]);
        }
        CreatList(L,a,7);
        printf("请输出:\n");
        DispList(L);
        sc(L,3);
        printf("删除后请输出:\n");
        DispList(L);
      
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 修改了问题 1月28日
  • 创建了问题 1月28日

悬赏问题

  • ¥15 用lstm来预测股票价格
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上