大佬教程收集整理的这篇文章主要介绍了链表:按索引获取节点有意外结果,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的代码:
#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
函数来填充列表,在使用负索引调用 pop
或 llgeTindex
并检查列表后,现在是第一个节点如果您调用 pop,该列表现在应该是最后一个,或者是由赋予 llgeTindex 的负索引索引的元素。
gcc (Debian 10.2.1-6) 10.2.1 20210110
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的链表:按索引获取节点有意外结果全部内容,希望文章能够帮你解决链表:按索引获取节点有意外结果所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。