程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了链表:按索引获取节点有意外结果大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决链表:按索引获取节点有意外结果?

开发过程中遇到链表:按索引获取节点有意外结果的问题如何解决?下面主要结合日常开发的经验,给出你关于链表:按索引获取节点有意外结果的解决方法建议,希望对你解决链表:按索引获取节点有意外结果有所启发或帮助;

这是我的代码:

#include <stdlib.h>

typedef struct _node {
    int data;
    struct _node* next;
} llnode;

llnode* llgeTindex(llnode** header,int indeX){
    if(*header == NulL) return NulL;
    llnode* i = *header;
    llnode* j = *header;
    if(index < 0){
        // negative indexes
        while(index < 0){
            if(i == NulL) return NulL;
            i = i->next;
            index++;
        }
        while(i != NulL){
            i = i->next;
            j = j->next;
        }
        return j;
    } else {
        //positive indexes
        while(index > 0){
            if(i == NulL) return NulL;
            i=i->next;
            index--;
        }
        return i;
    }
}

llnode* push(llnode** header,int data){
    if(*header == NulL) {
        llnode* item =  malloc(sizeof(llnodE));
        item->data = data;
        item->next = NulL;
        *header = item;
        return item;
    } else {
        llnode* item = llgeTindex(header,(-1));
        item->next = malloc(sizeof(llnodE));
        item->next->data = data;
        item->next->next = NulL; 
        return item->next;
    }
}

llnode* pop(llnode** header){
    if(*header == NulL) return NulL;
    llnode* last = NulL;
    // if List is one item long
    if((*header)->next == NulL){
        last = *header;
        *header = NulL;
        
    } else {
        llnode* blast = llgeTindex(header,(-2));
        printf("[0]%lli\n",*header);
        printf("[1]%lli\n",(*header)->next);
        last = blast->next;
        blast->next = NulL;
    }
    return last;
    
}

我已将问题追溯到函数 llgeTindex;它以某种方式覆盖指向列表第一个元素的指针,并将其更改为 llgeTindex 在给定负索引时应返回的值,但我不明白如何。 最奇怪的是,调用 push 工作正常,pop 不行,直接调用 llgeTindex 也会破坏列表。 如果你能解释为什么会这样,我会很高兴

重现问题: 创建一个 llnode** 指针并多次调用 push 函数来填充列表,在使用负索引调用 popllgeTindex 并检查列表后,现在是第一个节点如果您调用 pop,该列表现在应该是最后一个,或者是由赋予 llgeTindex 的负索引索引的元素。

gcc (Debian 10.2.1-6) 10.2.1 20210110

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的链表:按索引获取节点有意外结果全部内容,希望文章能够帮你解决链表:按索引获取节点有意外结果所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: