C语言 如何在链表中保存和获取下一个和上一个数据



美好的一天。有人知道如何在 c 中使用 linkedlist 处理下一个和上一个数据吗?在链表中获取以前的数据后,我获得了 NULL 值,如果我移动到右键(传递我想获取的索引),则采样,获取下一个数据没有错,但是如果我将键向左移动,即使我再次传递索引并获取我需要的数据,我也得到了 NULL 值。这是我的示例添加和获取链表代码。

typedef struct samp{
int idx;
char *name;
struct samp *next;
}sampLink;

sampLink *head=NULL,tail=NULL,test;
int addList(int idx,char *name){
  sampLink *tryi=NULL;
  tryi=(sampLink*)calloc(1,sizeof(sampLink));
  tryi->idx=idx;
  tryi->name=strdup(name);
  tryi->next=NULL;
  if(head==NULL){
    head=tryi;
    tail=tryi;
  }else{
    tail->next=tryi;
    tail=tail->next;
  }
  return 0;
}
sampLink *getList(int idx){
do{
    if(idx==head->idx){
      return head;
    }
    head=head->next;
  }while(head!=NULL);
  return head;
}

对于右移动

void moveRight(){
int i=0;
test=getList(i);
i++;
}

对于左边只有减号。希望有人能帮助我。谢谢

如果你真的想实现左/右移动,那么仅仅添加一个减号是行不通的。您需要实现一个双向链表才能在两个方向上移动。

向左移动时可能会返回 NULL,因为您在向右移动时更改头部指针,并且一旦更改头部指针,就会丢失一些节点,因为您的搜索不是双向的,因为它不是双向链表,因此返回结束节点 (NULL)。

从你的问题中还不清楚你想实现什么。但是,您仍然可以在下面找到一些指针:

    始终
  1. 建议始终维护指向链表"head"的指针。但是,您不断在 moveRight 函数中修改它。
  2. 如果你想无缝地左右移动,那么最好实现一个双向链接列表。

使用您当前的单向链表解决方案,您可以尝试以下代码进行 getList

sampLink *getList(int idx)
{ 
  sampLink *temp = head;
  do{     
       if(idx==temp->idx)
       {       
         return temp;     
       }     
      temp=temp->next;   
    }while(temp!=NULL);   //Now, the function only keeps modifying the temp pointer rather than the head pointer, so each time you call the function, if idx is valid, it will return a pointer.
 return NULL; //If you had encountered a node which is having idx, you would have returned in the loop itself, so returning NULL here.
}

相关内容

  • 没有找到相关文章

最新更新