我不知道标题是否适合该问题,但我认为我的问题与如何在函数中正确传递指针有关。 所以我有一个链表,该链表由head指向;
让我们假装我有这个链接列表,头指向:{1、2、3、4、5,NULL} 我调用函数NextNode(head),然后给出列表,结果将是head指向2。我想下一次,我调用函数,结果应该指向3,等等。 我希望在调用该函数时,下一个节点不应该总是head-> next,而应该继续。
我有一个将头部作为参数的函数;
struct node
{
int val;
node*next;
}
node * create()
{
node*tmp;
node *head;
for (int i = 1; i<6; i = i + 1)
{
tmp = new node;
tmp->val = i;
tmp->next = head;
head = tmp;
}
return head;
}
node* NextNode(node*current)
{
if (somethingHappens)
{
current = current->next; //this is wrong. Because it's important to not lose the pointer of head;
}
return current;
}
int main()
{
node* result;
node* another;
node* head;
head = create();
result = NextNode(head);
std::cout << result->val << std::endl;
//I call again the function, giving always as paramter the head pointer
another = NextNode(head);
std::cout << another->val << std::endl;
return 0;
}
所以result-> val应该给出2作为结果 而another-> val应该给出3。 但是显然这不会发生,因为头部是固定的。我还有其他方法可以做到这一点吗? 该代码是我想做的伪代码。希望我已经清楚了,英语不是我的母语,所以请耐心等待。
答案 0 :(得分:0)
将another = NextNode(head);
更改为another = NextNode(result);
。
下次调用NextNode()
时,您不会传递从上一个调用获得的下一个节点。
(在旁注中,我看到您发布的代码不是有效的代码,或者缺少某些代码并且没有发布;但是这些代码足以理解您的疑问并找出解决方案。 )