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

C++ 如何返回函数的指针并将其用作参数?,c++,linked-list,C++,Linked List,我不知道这个问题是否能正确地表达我的问题,希望解释和代码能有所帮助。英语不是我的第一语言,所以要耐心。这是一个家庭作业,所以我不能使用图书馆stl相关的东西。 如何在没有while/for循环的情况下正确遍历链表,并返回当前指针并将相同的指针赋给 函数?(可能是相互递归?我只是说,可能我的想法是错误的) 让我们假设在程序执行过程中,某些事情一直在发生(这是一个外部变量,为我提供了true)。 我怎么能一直浏览同一个列表,而不总是从头开始 显然,从程序执行的开始,它必须从头部开始,但之后我应该能够

我不知道这个问题是否能正确地表达我的问题,希望解释和代码能有所帮助。英语不是我的第一语言,所以要耐心。这是一个家庭作业,所以我不能使用图书馆stl相关的东西。 如何在没有while/for循环的情况下正确遍历链表,并返回当前指针并将相同的指针赋给 函数?(可能是相互递归?我只是说,可能我的想法是错误的)

让我们假设在程序执行过程中,某些事情一直在发生(这是一个外部变量,为我提供了true)。 我怎么能一直浏览同一个列表,而不总是从头开始

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

让我们假设我们有数字列表(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;
}
struct节点{
int-val;
节点*下一步;
};
类随机{
公众:
node*head=NULL;
节点*create(){
节点*tmp;
对于(int i=1;i<8;i=i+1){
tmp=新节点;
tmp->val=i;
tmp->next=头部;
水头=tmp;
}
返回此->头;
}
发生了什么事{
如果发生了什么事
返回true;
}
节点*右指针(节点*当前){
布尔发生了什么事;
SomethingOccessed=SomethingOccessed();
如果(发生了什么事){
当前=当前->下一步;
}
回流;
}
};
int main(int argc,字符**argv){
随机列表;
list.righpointer(list.head);
返回0;
}

像这样的东西怎么样

node* ptr = list.head;
while ((ptr = list.RightPointer(ptr)) != nullptr)
{
    // Do something with the pointer
}
我们首先用
list.head
调用
RightPointer
(因为
ptr
的初始化)。每次调用
RightPointer
都将返回相同的节点(如果没有发生任何事情)或
next
指针(如果发生了什么事情)

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


为了使代码更易于初学者阅读,上述循环相当于:

// 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;
}

你的代码无法编译。你缺少分号。我知道代码中有语法错误(它甚至不是代码,只是一些行,让我知道我想做什么)。我不是在问这个问题,我是在问一个概念/逻辑帮助,如果这有意义的话。while循环是否会在发生某些事情时中断,并返回它开始的指针?例如,列表中有1,2,3,4.5,6,7发生了什么事情,现在指针指向4,那么从4开始还是从1开始?我想做的是,如果发生了什么事情,指针指向4,那么在程序执行期间,当再次调用函数时,指针从4开始,而不是从1开始。希望我是clear@user12095096无论
RightPointer
返回什么节点,循环都将继续。如果我想将该指针返回给函数,该怎么办?@user12095096您的意思是要将其传递给下一个调用
RightPointer
函数的过程吗?这也是这个循环的作用。你试过这个吗?您是否尝试过以任何方式调试它(或在实际的调试器中单步调试代码)?