Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打印链接列表仅打印头部节点_C++_Linked List - Fatal编程技术网

C++ 打印链接列表仅打印头部节点

C++ 打印链接列表仅打印头部节点,c++,linked-list,C++,Linked List,在随机填写一个包含52张卡片的链表之后。当我尝试打印它时,它将打印头节点52次。“遍历链表逻辑”或插入逻辑是否有问题 这些是节点助手方法(abagNode有一个CardOfBag和一个next) 以下是链接列表的方法(称为bag): 它有头、尾和当前bagNode*指针 void bag::add(bagNode *node) // adds node to random position { int i, place, size; place = randomPosition();

在随机填写一个包含52张卡片的链表之后。当我尝试打印它时,它将打印头节点52次。“遍历链表逻辑”或插入逻辑是否有问题

这些是节点助手方法(a
bagNode
有一个
CardOfBag
和一个next)

以下是链接列表的方法(称为
bag
): 它有头、尾和当前
bagNode*
指针

void bag::add(bagNode *node) // adds node to random position
{
  int i, place, size;
  place = randomPosition();
  size = getCurrentSize();
  if (size == 0) // for initial insertion into empty linked list
  {
    setHead(node);
    setTail(node);
    alterSize(1);
  } else {
    if ((size - 1) == place) // if the insertion is at the last node
    {
      this->tail->setNext(node);
      setTail(node);
      alterSize(1);
    } else {
      if (place == 0) // if insertion is at head node
      {
        node->setNext(this->head);
        setHead(node);
        alterSize(1);
      } else {
        setCurrent(place); // for any insertion in between first and last nodes
        node->setNext(current->getNext());
        current->setNext(node);
        alterSize(1);
      }
    }
  }
}

int bag::getCurrentSize() // returns size of bag (linked list)
{
  return this->size;
}
void bag::alterSize(int num) // changes the size int of bag by num
{
  this->size = this->size + num;
}
int bag::randomPosition() // generates random number from 0 to size exclusive
{
  int size = getCurrentSize();
  if (size != 0)
    return (rand() % size);
}
void bag::setCurrent(int desiredPosition) // this traverses the current pointer
                                          // by desiredPosition steps from the head node
{
  int i;
  this->current = this->head;
  for (i = 0; i < desiredPosition; i++) {
    this->current->setNext(this->current->getNext());
  }
}
bagNode *bag::getCurrentNode() // returns node of current pointer
{
  return this->current;
}
void bag::add(bagNode*node)//将节点添加到随机位置
{
国际,地点,大小;
位置=随机位置();
size=getCurrentSize();
if(size==0)//用于初始插入到空链表中
{
设置头(节点);
setTail(节点);
改变大小(1);
}否则{
if((size-1)=place)//如果插入在最后一个节点上
{
此->尾部->设置下一步(节点);
setTail(节点);
改变大小(1);
}否则{
if(place==0)//如果插入在头节点
{
节点->设置下一步(此->头部);
设置头(节点);
改变大小(1);
}否则{
setCurrent(place);//用于第一个和最后一个节点之间的任何插入
节点->设置下一步(当前->获取下一步());
当前->设置下一步(节点);
改变大小(1);
}
}
}
}
int bag::getCurrentSize()//返回包的大小(链表)
{
返回此->大小;
}
void bag::alterSize(int num)//按num更改包的大小int
{
此->大小=此->大小+数量;
}
int bag::randomPosition()//生成从0到大小的随机数
{
int size=getCurrentSize();
如果(大小!=0)
返回值(rand()%size);
}
void bag::setCurrent(int desiredPosition)//它遍历当前指针
//通过从头部节点定位步骤
{
int i;
此->当前=此->头部;
对于(i=0;icurrent->setNext(this->current->getNext());
}
}
bagNode*bag::getCurrentNode()//返回当前指针的节点
{
返回此->当前;
}
bagNode::setNext()应该指向提供的节点的下一个点;不要使用其他节点:

void bagNode::setNext(bagNode* setNode) //sets next bagnode                                                                              
{                                                                                                                                        
  this->next = setNode;
}
您的包::setCurrent()不工作。你应该让这个->当前继续“下一步”,直到你达到想要的位置,而不是你只改变它的下一个指针到与以前的值相同

改为这样做:

void bag::setCurrent(int desiredPosition)                                                                                             
{                                                                                                                                        
  int i;                                                                                                                                 
  this->current = this->head;                                                                                                            
  for(i = 0; i < desiredPosition; i++)                                                                                                   
    {                                                                                                                                    
      this->current = this->current->getNext();
    }                                                                                                                                    
}
void bag::setCurrent(int desiredPosition)
{                                                                                                                                        
int i;
此->当前=此->头部;
对于(i=0;icurrent=this->current->getNext();
}                                                                                                                                    
}
现在应该工作得更好了。

在您的函数中

void bag::setCurrent(int desiredPosition)

您根本没有更改此->当前。基本上你在这个函数中什么也没做。

很抱歉,只是修复了它。
setCurrent
以一种奇怪的方式修改了列表。你有没有在调试器中处理过这个问题?我尝试过使用gdb,但我不知道如何充分使用它。我应该找什么?setCurrent()函数被许多其他函数使用,它不会导致程序抛出任何错误。虽然与问题无关,但如果
rand()
可能返回负数,那么
rand()%size
可能是负数。
this->current
是否有变化?@rcgldr不完全确定您的意思,setter没有更改next的值吗?啊,明白了(编辑后)。是的,编辑我的答案。这修正了它,谢谢!但是,我仍然不明白为什么这个->当前->设置下一步(这个->当前->获取下一步();不工作?setNext(节点)设置.next指针。getNext()获取当前的.next指针。所以你的代码应该是“设置我的下一个指针到我当前的下一个指针”哦,哇,我感觉像在idoit中。。。真不敢相信我没看到,再次谢谢你!你可以通过1)解释为什么什么都没做,2)提出问题的解决方案来强化这个答案。
void bag::setCurrent(int desiredPosition)