函数使用c+;中的递归反转链表+; 我必须用C++中的递归写一个函数来反转链表。我这样做了,推理对我来说似乎是正确的,但代码不起作用。有人能解释一下为什么吗?谢谢大家!
这就是功能:函数使用c+;中的递归反转链表+; 我必须用C++中的递归写一个函数来反转链表。我这样做了,推理对我来说似乎是正确的,但代码不起作用。有人能解释一下为什么吗?谢谢大家!,c++,recursion,linked-list,C++,Recursion,Linked List,这就是功能: list* reverseList(list* head, list* p, list* n){ if(head->next == NULL){ head->next = p; p = head; head = n; n = NULL; return head; } else{ head->next = p; p = head
list* reverseList(list* head, list* p, list* n){
if(head->next == NULL){
head->next = p;
p = head;
head = n;
n = NULL;
return head;
}
else{
head->next = p;
p = head;
head = n;
n = n->next;
return reverseList(head, p, n);
}
}
这是列表结构:
struct list{
int val;
list *next;
};
这是主要问题:
int main() {
list *head, *p1, *p2, *prev, *next;
head = new list;
head->val = 1;
p1 = new_node(head, 2);
p2 = new_node(p1, 3);
p2->next = NULL;
print_list(head);
prev = NULL;
next = head->next;
reverseList(head, prev, next);
print_list(head);
return 0;
}
这些是我用来创建具有值的新节点和打印列表的其他函数:
list* new_node(list* old_node, int value)
{
old_node->next = new list;
old_node->next->val = value;
return old_node->next;
}
void print_list(list* head){
while(head != NULL){
cout << head->val << endl;
head = head->next;
}
}
list*新节点(list*旧节点,int值)
{
旧节点->下一步=新列表;
旧节点->下一步->值=值;
返回旧节点->下一步;
}
无效打印列表(列表*标题){
while(head!=NULL){
下一步;
}
}
您的代码有两个问题
reverseList
的返回值,返回值应为head=reverseList(head,prev,next)代码>
head->next==NULL
上的reverseList
中,您需要返回上一个指针,而不是下一个指针,它无论如何都指向NULLvoid reverseList(list* &head, list* &p) {
if (!head) return;
list* t = head->next;
head->next = p;
p = head;
if (t)
{
head = t;
reverseList(head, p);
}
}
并称为like
reverseList(head,prev)代码>您应该添加main
,并发布一个剪贴,它可以被复制、编译和运行。添加完整的代码,以便我们可以编译并查看结果。提示:*p
是一个指针,但p
只是一个本地to函数,在调用函数时不会做任何更改。我添加了编译所需的所有代码,直到链接列表为null,当函数retrun时,您的最后一个值在堆栈中,如果(p->next==null),您可以在某些数组或其他地方打印或存储该值cout data else p=p->next;p是指向列表的指针。它似乎可以工作,您需要做的是打印列表(p2)代码>反转后,头部不再是头部`
void reverseList(list* &head, list* &p) {
if (!head) return;
list* t = head->next;
head->next = p;
p = head;
if (t)
{
head = t;
reverseList(head, p);
}
}