C++ 线性链表显示数组的递归解法
我正在研究一种递归解决方案,以显示整个线性链表数组。这不是家庭作业,而是为了准备考试,我来了 我目前有一些分割错误,但我不知道为什么。我感觉这段代码的指针比较部分有问题。 现在发生的事情似乎是我越界了,例如, 我有4张清单C++ 线性链表显示数组的递归解法,c++,arrays,pointers,linked-list,singly-linked-list,C++,Arrays,Pointers,Linked List,Singly 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 我会在之
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
我会在之后显示所有列表和seg fault,但是,我不确定原因是什么,我唯一合理的怀疑是指向我检查指针比较的代码部分。我不经常发表关于堆栈溢出的文章,所以,如果我有任何格式问题,请相应地指导我
//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);
}
//包含int数据的简单结构
结构节点
{
int数据;
节点*下一步;
}
//表类有:
//线性链表数组
//数组大小
类表
{
公众:
/*
假设构造函数和析构函数已正确实现
*/
void display();
void displayArr(节点**头);
空心导线(节点*头部);
私人:
void transverselll(节点*头部);
void displayArr(节点**头);
节点**头;
整数大小;
}
//包装纸
void表::display()
{
displayArr(头部);
}
//接受指针数组
void table::displayArr(节点**头)
{
//如果没有数组
如果(!head)返回;
如果(*head==head[size-1])//指针比较,请检查边界
{
//在最后一个索引中输入block
cout问题是head[size-1]
。您应该记住head
指针在递归过程中已移动
您可以在displayArr
中使用head
以外的另一个名称,以避免重写类成员head
,该类成员记录了列表的真正头部
嗯,将成员头
重命名为\u头
,并将头[size-1]
更改为\u头[size-1]似乎更容易
为什么要把这件事弄得这么复杂?你可以很容易地实现一个线性链表,然后创建一个数组。你的实现方式是错误的。如果你想用面向对象的方式实现它,首先你应该创建一个线性链表,然后你应该在上面实现链表数组(继承线性链表类)。这段代码是由讲师预先编写的,我也会以完全不同的方式编写。您应该在问题中提到这一点。找到了,谢谢!我更改了变量的名称并检查了:if(*array==head[size-1]),没有seg错误!