163585580 发表于 2021-5-6 18:11

双链表的疑问:在p后插入q这个函数执行完后,想打印输出却停止运行

本帖最后由 163585580 于 2021-5-6 18:12 编辑

这是双链表的代码,有个问题;
main函数里的最后一个print()执行不了,搞不清楚是什么原因

//// 双链表的全部
//

#include "demo7.h"
#include <stdio.h>
#include <malloc.h>

typedef struct DNode{
    int data;
    struct DNode *prior,*next;
}DNode,*DLinkList;

//初始化双链表
bool InitDLinkList(DLinkList &L){
    L=(DNode *)malloc(sizeof(DNode));
    if(L==NULL){
      return false;
    }
    L->prior=NULL;
    L->next=NULL;
    return true;
}
//在p结点后插入s结点
bool InsertNextDNode(DNode *p,DNode *s){
    if(p==NULL||s==NULL){
      return false;
    }
    s->next=p->next;
    if(p->next!=NULL){
      p->next->prior=s;
    }
    s->prior=p;
    p->next=s;
    return 0;
}
//删除某个结点
bool DeleteNextNode(DNode *p){
    if (p==NULL){
      return false;
    }
    DNode *q=p->next;
    if(q==NULL){
      return false;
    }
    p->next=q->next;
    if(q->next!=NULL){
      q->next->prior=p;
    }
    free(q);
    return false;
}
//销毁栈
void Destorylist(DLinkList &L){
    while (L->next!=NULL){
      DeleteNextNode(L);
    }
    free(L);
    L=NULL;
}
//双链表的遍历
void print(DLinkList &L){
    L=L->next;
    while(L!=NULL){

      printf("%d\n",L->data);
      L=L->next;
    }
}
//单链表的查找
DNode *GetElem(DLinkList L,int i){
    if (i<0){
      return NULL;
    }
    DNode *p;
    int j=0;
    p=L;
    while (p!=NULL&&j<i){
      p=p->next;
      j++;
    }
    return p;
}
//尾插法建立单链表,插到它的后面(按位序插入也是这个代码)
bool ListInsert(DLinkList &L, int i,int e){
    if (i<1){
      return false;
    }
    DNode *p;
    int j=0;
    p=L;
    //找到第i-1个结点
    while (p!=NULL&&j<i-1){
      p=p->next;
      j++;
    }
    if(p==NULL){
      return false;
    }
    DNode *s=(DNode *)malloc(sizeof(DNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return true;
}



int main(){
    DLinkList L;
    InitDLinkList(L);
    ListInsert(L,1,12);
    ListInsert(L,2,21);
    ListInsert(L,3,15);
    ListInsert(L,4,63);
    ListInsert(L,5,42);
    ListInsert(L,6,390);
    ListInsert(L,8,4000);


    DNode *c,*d,*h;
    DNode *m;

    c=GetElem(L,2);
    d=GetElem(L,8);
    h=GetElem(L,5);

    DeleteNextNode(h);
    print(L);
    printf("第一部分完成\n");


    InsertNextDNode(c,d);


    printf("第二部分完成,\n");
    print(L);//这个函数执行不了,请问是什么原因?

}

163585580 发表于 2021-5-8 14:29

没动静吗???
页: [1]
查看完整版本: 双链表的疑问:在p后插入q这个函数执行完后,想打印输出却停止运行