显示线性链表数组的递归解决方案
Recursive solution to display array of linear linked list
我正在研究一个递归解决方案来显示整个线性链表数组。这不是作业而是备考,我来了
我目前有一些分段错误,但不确定原因。我感觉这段代码的指针比较部分有问题。
似乎正在发生的事情是我越界了,例如,
我有 4 个列表
List1 - 1 2 3 4 5
List2 - 5 4 3 2 1
List3 - 1 3 2 4 5
List4 - 2 4 3 1 5
我的函数会显示:
1 2 3 4 5
5 4 3 2 1
1 3 2 4 5
2 4 3 1 5
size is: 4
之后我会显示所有列表和段错误,但是,我不确定原因是什么,我唯一合理的怀疑是指向我检查指针比较的代码部分。我不经常 post 堆栈溢出,所以,如果我有任何格式问题,请相应地指导我。
//simple struct with int data
struct node
{
int data;
node* next;
}
//table class has:
//array of linear linked lists
//size of array
class table
{
public:
/*
assume constructors and destructors are properly implemented
*/
void display();
void displayArr(node** head);
void traverse(node* head);
private:
void traverseLLL(node* head);
void displayArr(node** head);
node** head;
int size;
}
//wrapper
void table::display()
{
displayArr(head);
}
//takes in array of pointer
void table::displayArr(node** head)
{
//if no array
if(!head) return;
if(*head == head[size-1]) //pointer comparison, check bounds
{
//enter block, on last index
cout << "size is: " << size << endl;
traverse(*head); //do this
return; //get out
}
else //not on last index
{
traverse(*head); //display
++head; //increment index
displayArr(head); //recursive call
}
//traverse to the end of a LLL and displays it
void table::traverse(node* head)
{
if(!head) return;
cout << head->data << endl;
traverse(head->next);
}
问题是head[size-1]
。你应该记住 head
指针在递归过程中被移动了。
您可以在 displayArr
中使用除 head
之外的其他名称,以避免覆盖 class 成员 head
,它记录了列表的真正头部。
嗯,把成员head
重命名为_head
,把head[size-1]
改成_head[size-1]
好像更简单
我正在研究一个递归解决方案来显示整个线性链表数组。这不是作业而是备考,我来了
我目前有一些分段错误,但不确定原因。我感觉这段代码的指针比较部分有问题。 似乎正在发生的事情是我越界了,例如, 我有 4 个列表
List1 - 1 2 3 4 5
List2 - 5 4 3 2 1
List3 - 1 3 2 4 5
List4 - 2 4 3 1 5
我的函数会显示:
1 2 3 4 5
5 4 3 2 1
1 3 2 4 5
2 4 3 1 5
size is: 4
之后我会显示所有列表和段错误,但是,我不确定原因是什么,我唯一合理的怀疑是指向我检查指针比较的代码部分。我不经常 post 堆栈溢出,所以,如果我有任何格式问题,请相应地指导我。
//simple struct with int data
struct node
{
int data;
node* next;
}
//table class has:
//array of linear linked lists
//size of array
class table
{
public:
/*
assume constructors and destructors are properly implemented
*/
void display();
void displayArr(node** head);
void traverse(node* head);
private:
void traverseLLL(node* head);
void displayArr(node** head);
node** head;
int size;
}
//wrapper
void table::display()
{
displayArr(head);
}
//takes in array of pointer
void table::displayArr(node** head)
{
//if no array
if(!head) return;
if(*head == head[size-1]) //pointer comparison, check bounds
{
//enter block, on last index
cout << "size is: " << size << endl;
traverse(*head); //do this
return; //get out
}
else //not on last index
{
traverse(*head); //display
++head; //increment index
displayArr(head); //recursive call
}
//traverse to the end of a LLL and displays it
void table::traverse(node* head)
{
if(!head) return;
cout << head->data << endl;
traverse(head->next);
}
问题是head[size-1]
。你应该记住 head
指针在递归过程中被移动了。
您可以在 displayArr
中使用除 head
之外的其他名称,以避免覆盖 class 成员 head
,它记录了列表的真正头部。
嗯,把成员head
重命名为_head
,把head[size-1]
改成_head[size-1]