push_front方法C ++

时间:2016-01-23 17:04:02

标签: c++ list pointers c++11 nodes

我获得了一个具有Node内部类的列表类。这是内部阶级:

class Node
{
public:
    /**
     * The constructor
     * @param data the data to be stored in this node
     */
    explicit Node( const Object& data )
      : data( data ), next( NULL ) {}

    Object data;
    Node * next;
};

我们被告知编写一个push_front方法,将元素推送到列表的前面。我在提出正确的方法时遇到了一些麻烦。 list类有3个私有属性:uint sizeNode * firstNode * last

我认为push_front应该工作的方式是:如果列表当前为空(即size = 0),那么我们试图推送的任何对象应该成为该列表中的最后一个元素。我们尝试推送的任何其他元素将成为第一个并指向下一个节点。

void push_front( const Object& item )
{
    Node * new_node = new Node( item );

    if ( size == 0 )
    {
        new_node = last;
    }
    else
    {
        Node * temp = first;
        first->data = new_node;
        first->next = temp;
    }

我无法帮助,但觉得这不是正确的方法。任何人都可以指出我正确的方向或建议我如何以正确的方式做到这一点?谢谢。     }

2 个答案:

答案 0 :(得分:2)

您所要做的就是:

  • 在堆上构造一个新节点
  • 如果size == 0使 firstlast都指向新节点,否则将当前first指定给{{1}并使new_node->next指向first指向
  • 的内容
  • 增量new_node

您的代码在size停止有意义(您刚刚泄漏了内存,不关心new_node = last;?),还有类型不匹配的原因:

first

答案 1 :(得分:2)

<ion-view style="" title="iframe">
<ion-content class="has-header" overflow-scroll="true" padding="true">
    <div style="" class="list card">
        <div class="item item-divider-android">iframe content</div>
        <div class="item item-body-android">
            <div style="">
                <center>
<iframe src='{{trustSrc(iframe.src)}}' frameborder="0" width="100%"    height="500" scrolling="yes"></iframe></center>
                 </div>
            </div>
       </div>
    </ion-content>

显然有问题。你已经分配了一个对象,但是如果列表是空的,你就把它丢弃了。它没有多大意义。

你也没有在任何地方更新Node * new_node = new Node( item ); if ( size == 0 ) { new_node = last; } ,所以这也是一个问题。

您可能需要以下内容:

size