递归解决方案显示线性链表的数组

时间:2017-07-21 04:47:26

标签: c++ arrays pointers linked-list singly-linked-list

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

我目前有一些细分错误,但我不确定原因。我有一种感觉,这个代码的指针比较部分有问题。 似乎正在发生的事情是我走出界限,例如, 我有4个

列表
//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);
}

我的功能会显示:

connect(sender, SIGNAL(mySignal()), receiver, SLOT(mySlot())); // 1
connect(sender, &MySender::mySignal, receiver, &MyReceiver::mySlot); // 2

之后我会显示所有列表和段错误,但是,我不确定原因是什么,我唯一合理的怀疑是指向我检查指针比较的代码部分。我不经常发布堆栈溢出,所以,如果我有任何格式问题,请指导我。

2

1 个答案:

答案 0 :(得分:2)

问题是head[size-1]。您应该记住在递归过程中移动了head指针。

您可以在head中使用除displayArr之外的其他名称,以避免覆盖记录真实列表头部的类成员head

嗯,将成员head重命名为_head并将head[size-1]更改为_head[size-1]

似乎更容易