C++ 线性链表显示数组的递归解法

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 我会在之

我正在研究一种递归解决方案,以显示整个线性链表数组。这不是家庭作业,而是为了准备考试,我来了

我目前有一些分割错误,但我不知道为什么。我感觉这段代码的指针比较部分有问题。 现在发生的事情似乎是我越界了,例如, 我有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错误!