我如何使用c ++以相反的顺序打印这个单链表中的元素

时间:2013-11-13 16:25:03

标签: c++

            #include <iostream>
            #include<string>
            using namespace std;

            struct nodeType
            {
                int info;
                nodeType *next;
            };

            class linkedListType
            {
            private:
                nodeType *first, *last;
                int length;

            public:
                linkedListType()//constructor
                {
                    first = last = NULL;
                    length = 0;
                }

                void print() // normal print
                {
                    nodeType * current = first;
                    while (current != NULL)
                    {
                        cout << current->info <<" ";
                        // update statement
                        current = current ->next;
                    }
                }


                void insertEnd(int item) //insert item to the end of the list
                {  // forward insertion 
                    nodeType* newNode = new nodeType;
                    newNode ->info = item;

                    if (length == 0)
                    {
                        first = last = newNode;
                        newNode->next = NULL;
                    }//if

                    else
                    {
                        last->next = newNode;
                        last =  newNode;
                        newNode->next = NULL;
                    }// else

                    length++;
                }
                }
                void clearList()
        {
            nodeType * current;
            while ( first != NULL)
            {
                current = first;
                first = first->next;
                delete current;
                length--;
            }// while
    ~linkedListType() //destroctor
        {
            clearList();
        }


> `

//
  

Blockquote我不能写这个方法实现请任何人帮助我解释为什么///////////////////////////////// ///////////////////////////////////               / 这个方法。任何人都可以帮我写信给我并解释原因 /               ////////////////////////////////////////////////// //////////////////

`



                void printReverse() /*this is the function that i cant understand it or complete it. this function print elements in the list in reverse*/

                {
                    nodeYype* current=last ,*newnode =new nodType ;
                    for(int i=length;i>=0;i--)
                            //i cant complete this method

                }
            };
            void main()
            {
               linkedListType list1;

               list1.insertEnd(12); //insert item
               list1.insertEnd(25);//insert item
               list1.insertEnd(18);//insert item
               list1.insertEnd(37);//insert item
               list1.insertEnd(60);//insert item
               list1.insertEnd(100);//insert item
               list1.insertEnd(37);//insert item
               list1.insertEnd(37);//insert item
               list1.insertEnd(37);//insert item
               list1.insertEnd(60);//insert item
               list1.insertEnd(25);//insert item
               list1.insertEnd(100);//insert item
               list1.insertEnd(25);//insert item

               cout <<"Printing the linked list elements\n";
               list1.print();
               cout <<"\nPrinting the list elements in reverse order\n";
               list1.printReverse();
            }

4 个答案:

答案 0 :(得分:3)

void nodeType::PrintListReverse()
{
  if (next)
     next->PrintListReverse();
  std::cout << info << std::endl;
}

递归查找列表的末尾,返回时打印。

(我只能帮助你,因为我很无聊)

可替换地:

void linkedListType::PrintList()
{
    std::vector<int> info(length);
    nodeType* curNode = first;
    for (int i = 0; curNode != NULL; i++, curNode = curNode->next)
    {
        info[i] = curNode->info;
    }
    for (int i = length-1; i >=0; i--)
    {
        std::cout << info[i] << std::endl;
    }
}

答案 1 :(得分:0)

如果您可以编写递归函数以按正确的顺序遍历列表,则以相反的顺序打印它是快速的。

答案 2 :(得分:0)

有两种可能性。要么编写递归函数,要么以相反的顺序重建列表。也就是说,在打印列表之前,您要么在现有的基础上创建一个新列表,要么重建原始列表本身。

答案 3 :(得分:0)

你已经有一个循环,将i从长度减少到0.基于i,你可以遍历列表并打印你到达的节点。微调关闭1个错误,以便实际打印从最后到第一个,并在列表为空时不打印。