吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 908|回复: 1
收起左侧

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

[复制链接]
163585580 发表于 2021-5-6 18:11
本帖最后由 163585580 于 2021-5-6 18:12 编辑

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

[C++] 纯文本查看 复制代码
//// 双链表的全部
//

#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
没动静吗???
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 02:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表