如何返回函数的指针并将其用作参数?

时间:2019-09-24 15:17:33

标签: c++ linked-list

我不知道问题是否可以正确表达我的问题,希望移植和代码对您有所帮助。英语不是我的母语,所以请耐心等待。这是一项家庭作业,因此我不能使用与库stl相关的东西。 如何正确地遍历没有while / for循环的链表,并返回当前指针并赋予相同的指针 功能? (也许是相互递归?我只是说,也许我的想法是错误的。)

让我们假装在程序执行期间不断发生某些事情(这是一个使我成真的外部变量)。 如何始终遍历同一列表,而不必总是从头开始?

从程序的执行开始,显然它必须从头开始,但是随后我应该能够“返回” 下一个指针,然后是下一个。

假装我们有数字列表(1、2、3、4、5、6、7); 程序启动,我返回指向1的指针,这很好,在程序执行相同的过程中,发生了一些事情 并且我需要返回2,再次,再次发生某些情况,然后该函数应返回3,依此类推。 我怎样才能做到这一点? 您所看到的代码是我想要做什么的一个想法。我不确定我想做什么,如果不是,我该怎么办?

struct node {
  int val;
  node* next;
};
class random {
 public:
  node* head = NULL;
  node* create() {
    node* tmp;
    for (int i = 1; i < 8; i = i + 1) {
      tmp = new node;
      tmp->val = i;
      tmp->next = head;
      head = tmp;
    }
    return this->head;
  }
  bool SomethingHappens() {
    if  // somethingHappens
      return true;
  }
  node* RightPointer(node* current) {
    bool somethinghappened;
    somethinghappened = SomethingHappens();
    if (somethinghappened) {
      current = current->next;
    }
    return current;
  }
};
int main(int argc, char** argv) {
  random list;
  list.RightPointer(list.head);

  return 0;
}

1 个答案:

答案 0 :(得分:0)

类似的东西

node* ptr = list.head;
while ((ptr = list.RightPointer(ptr)) != nullptr)
{
    // Do something with the pointer
}

我们首先用RightPointer调用list.head(由于ptr的初始化)。每次对RightPointer的调用都将返回相同的节点(如果什么都没有发生)或返回next指针(如果发生了什么)。

到达列表末尾时,该函数将返回一个空指针,该指针使循环条件为假并停止迭代。


为使代码对于初学者来说更容易阅读,上述循环等效于此:

// Get the first node back from RightPointer
node* ptr = list.RightPointer(list.head);

// Loop while the pointer returned by RightPointer isn't a null pointer
while (ptr != nullptr)
{
    // Do something with the pointer...
    // ...
    // ...
    // ...

    // Get the (possibly) next pointer from RightPointer
    ptr = list.RightPointer(ptr);

    // Note that the above call could return the same node that was passed to it
    // Or it might return ptr->next
    // This means the above assignment could either be equivalent to
    //     ptr = ptr;
    // or
    //     ptr = ptr->next;
}
相关问题