如何用循环方式来display LLL by reverse way

用循环的方式来以reverse 的方式来展示单链表内容,小编目前只想到一种方法就是将所有的data存储到数组中,那么用循环的方式就可以将它们展示出来。

下面是展示.h file 里面的文件

//This is the list.h file

#include<iostream>
#include<cctype>
#include<cstring>

using namespace std;

struct node
{
    int data;
    node * next;
};

class list
{
    public:
        //These functions are provided for you
        list(); //Supplied
        ~list(); //Supplied
        void build(); //Supplied
        void display(); //Supplied

        //Display the LLL reverse
        //Return the count of the display
        int display_reverse();

    private:
        node * head;
        node * tail;
};

下面展示的如何实现这个函数的代码

#include "list.h"

int list::display_reverse()
{
    if(!head)
        return 0;
    int count = 0;
    int * array = NULL;
    while(head)
    {
        ++count;
        //这个是用来判定数组是否为空
        //如果为空,那么就得声明这个数组来存储单链表里的内容
        if(!array)
        {
            array = new int[count];
            //count-1是指向当前的数组的下标
            //将当前的内容存储到当前下标里
            array[count-1] = head->data;
        }
        //如果这个数组不空
        //那就得声明helper array来帮助存储之前所有的内容
        else
        {
            //这个temp的数组就是用来存储数组已经已有的内容
            int * temp = new int[count];
            //用一个for循环来将所有之前array里面的内容全部导入到temp数组里
            for(int I = 0; I<count-1; ++i)
            {
                temp[I] = array[I];
            }
            //count-1是表明当前的数组里的最后一个index下标
            //将现在head指针所指的内容存到最后一个index下标里
            temp[count-1] = head->data;
            //将所有的array里的内容导入到temp数组里之后
            //就得将这个array的数组删除掉
            delete [] array;
            array = NULL;
            //又声明一个array的数组
            //这次的array的数组是用来存储所有的链表的内容
            array = new int[count];
            //用for循环来将temp的数组导入到array里面
            for(int I = 0; I<count; ++i)
            {
                array[I] = temp[I];
            }
            //导入完之后,将temp的数组删除掉
            delete [] temp;
            temp = NULL;
        }
        //现在array数组里已经存储到了head指针所指过的内容
        //然后就得将head指针进行遍历
        head = head->next;
    }
    //这是用for循环来将所有的array展示出来
    for(int I = count; I>0; --I)
    {
        cout<<array[I-1]<<" ";
    }
    //展示完之后,就得将array删除掉
    delete [] array;
    array = NULL;
    //返回已经展示了多少个数组内容
    return count;
}

解释一下:
声明temp 的数组是专门存储当前单链表里的内容,而array数组是来声明存储所有单链表里的内容。

说实话,感觉用循环来做这道题目,很麻烦。
用上递归来做这道题目,几行代码就能做出来了,感觉更容易。
但是,对于还没接触递归的或者是刚接触递归的,用循环来做这道题目,更容易理解逻辑是怎么样的。

下面是展示结果:

希望这篇文章对刚学数据结构或者刚接触递归的同学们有帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值