JSRDIT 2022-03-06 14:12 采纳率: 100%
浏览 28
已结题

为什么运行结果不是123451234512345

#include <stdio.h>
#include<stdlib.h>


typedef struct twoNode {
    int data;
    twoNode* prior;
    twoNode* next;
}DNode;


DNode* CreateNode(int i) {
    DNode* node = (DNode*)malloc(sizeof(DNode));
    node->prior = NULL;
    node->next = NULL;
    node->data = i;
    return node;
}

void InsertFive(DNode* h){
    for (int i = 1; i <= 5; i++) {
        DNode* NewNode = CreateNode(i);
        h->next = NewNode;
        h = h->next;
    }
}

void OutPut(DNode* h) {
    h = h->next;
    while (h)
    {
        if (h == NULL)
            break;
        printf("%d", h->data);
        printf("\n");
        h = h->next;
    }
}



int main() {
    DNode* head = (DNode*)malloc(sizeof(DNode));
    DNode*  h = head;
    InsertFive(h);
    InsertFive(h);
    InsertFive(h);
    OutPut(head);
}



运行结果

img

展开全部

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2022-03-06 14:29
    关注

    肯定不对啊,h指针并没有改变位置,你应该插入5个元素前,将h移动到链表尾部节点才是正确的。不然每次h都是头节点,你插入的是头节点之后,但原先的链表就断掉了。
    修改如下:(修改处已增加注释)

    #include <stdio.h>
    #include<stdlib.h>
     
     
    typedef struct twoNode {
        int data;
        twoNode* prior;
        twoNode* next;
    }DNode;
     
     
    DNode* CreateNode(int i) {
        DNode* node = (DNode*)malloc(sizeof(DNode));
        node->prior = NULL;
        node->next = NULL;
        node->data = i;
        return node;
    }
     
    void InsertFive(DNode* h){
        while(h->next != NULL) //每次插入节点时,先将h指向最后一个节点
            h = h->next;
        for (int i = 1; i <= 5; i++) {
            DNode* NewNode = CreateNode(i);
            h->next = NewNode;
            h = h->next;
        }
    }
     
    void OutPut(DNode* h) {
        h = h->next;
        while (h)
        {
            if (h == NULL)
                break;
            printf("%d", h->data);
            printf("\n");
            h = h->next;
        }
    }
     
     
     
    int main() {
        DNode* head = (DNode*)malloc(sizeof(DNode));
        DNode*  h = head;
        h->next = NULL;   //要初始化头节点的next和prior为空
        h->prior = NULL;
        InsertFive(h);
        InsertFive(h);
        InsertFive(h);
        OutPut(head);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月6日
  • 创建了问题 3月6日

悬赏问题

  • ¥15 利用3支股票数据估计其均值和方差的95%置信区间。
  • ¥15 微信小程序运行一项功能时,弹出未知错误弹框,检查代码没有问题
  • ¥15 ATAC测序生成self-pseudo replicates之前是否要进行去线粒体reads
  • ¥15 python模糊字匹配函数问题
  • ¥20 谁刷目标页面的uv记录器上数据,数据只记录跳转的数值
  • ¥30 数据库软件的安装方法
  • ¥15 一道以太网数据传输题
  • ¥15 python 下载群辉文件
  • ¥50 代码还没怎么运行但是需要代码功能调用数据
  • ¥15 vue请求不到数据,返回状态200,数据为html