2301_80962607 2024-03-16 09:14 采纳率: 0%
浏览 0

为啥我的运行结果和想象的不太一样

正确的应该是这样

img


而我的是,不仅输出的不对,长度也没输出

img


下面是我的代码

img

img

img

img

img

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-16 09:14
    关注

    引自免费微信小程序:皆我百晓生

    从你给出的描述和代码片段中,我注意到你在尝试实现一个单链表的基本操作,包括初始化、插入元素、删除元素、查找元素以及显示整个链表等。但是你的运行结果与期望不符,并且长度没有输出。

    首先,我们需要确认几个关键问题:

    1. 初始化:在InitList(LinkNode *&L)函数中,当输入元素后,循环内似乎没有正确地将每个新节点链接起来。当前的代码片段中,在循环内部每次分配内存后并没有把新节点连接到链表上,而是直接覆盖了s变量。正确的做法是在循环内部创建新节点并将它们依次链接起来。
    void InitList(LinkNode *&L) 
    {
        LinkNode *r = L;
        int n, t;
        char a[100];
    
        // 初始化头结点
        L = (LinkNode *)malloc(sizeof(LinkNode));
        L->next = NULL;
    
        cout << "输入几个元素" << endl;
        cin >> n;
        cout << "输入的元素为" << endl;
    
        for(int t = 0; t < n; t++) 
        {
            s = (LinkNode *)malloc(sizeof(LinkNode));
            s->data = a[t];
            
            if(t == 0)
                L->next = s;
            else
                r->next = s;
            
            r = s; // 更新尾指针
            s->next = NULL;
        }
    }
    
    1. 输出链表长度ListLength(LinkNode *L)函数中,用于计算链表长度的循环条件应该是p != NULL,同时,应确保在循环结束后返回计数器n的值。
    int ListLength(LinkNode *L) 
    {
        int n = 0;
        LinkNode *p = L->next;
    
        while(p != NULL) 
        {
            n++;
            p = p->next;
        }
    
        return n;
    }
    
    1. 其它函数:对于插入、删除和查找元素的函数,你也需要检查对应的逻辑是否正确,特别是索引边界判断和节点的链接关系。比如在ListInsertListDelete函数中,要注意对插入位置或删除位置的边界处理。

    建议您逐个检查各个函数实现,并调试以定位问题。同时,务必确保在调用这些函数前已经成功初始化了链表结构。如果可能,请提供完整的代码,这样我可以帮助您更准确地找出问题所在。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月16日