我试图使用递归来反转链表,但当我试图打印出链表的所有元素时,一开始它按预期打印出元素,但在打印出最后一个元素后,它开始重复打印最后一个和倒数第二个元素。我试着调试它,我认为问题是最后一个元素指向倒数第二个元素——它是否应该指向NULL。我无法弄清楚我的代码出了什么问题,所以请帮我解决。
示例-输入1,2,3,4,5,6
预期输出6,5,4,3,2,1
实际输出6,5,4,3,2,1,2,1,2。。。
#include<iostream>
using namespace std;
class node{
public:
int val;
node *next;
node(int val)
{
this->val = val;
this->next = NULL;
}
node(int val,node *next)
{
this->val= val;
this->next=next;
}
};
void insertAtTail(node *&head,int val){
node *n = new node(val);
if (head==NULL)
{
head = n;
return;
}
node *temp = head;
while (temp->next!=NULL)
{
temp = temp->next;
}
temp->next=n;
}
void display(node *head)
{
node *n = head;
while (n!=NULL)
{
cout << n->val << "->";
n = n->next;
}
cout << "NULL" << endl;
}
node* reverseRecursive(node *&head)
{
if (head == NULL || head->next==NULL)
{
return head;
}
node *nHead = reverseRecursive(head->next);
head->next->next = head;
head->next == NULL;
return nHead; // 1->2->3->4->5->6->NULL
}
int main()
{
node *head = NULL;
insertAtTail(head,1);
insertAtTail(head,2);
insertAtTail(head,3);
insertAtTail(head,4);
insertAtTail(head,5);
insertAtTail(head,6);
display(head);
node *newhead = reverseRecursive(head);
display(newhead);
return 0;
}
函数reverseRecursive()
中存在错误。
线路head->next == NULL;
应为head->next = NULL;
node* reverseRecursive(node *&head)
{
if (head == NULL || head->next==NULL)
{
return head;
}
node *nHead = reverseRecursive(head->next);
head->next->next = head;
head->next == NULL; // <<< should be head->next = NULL;
return nHead; // 1->2->3->4->5->6->NULL
}
不确定您使用的是哪种编译器,但此语句通常会生成警告。