【问题标题】:Trivial singly-linked list inquiry琐碎的单链表查询
【发布时间】:2010-12-25 21:03:49
【问题描述】:

链表类的addToHead函数不能正常工作。该功能似乎正在更换头部。帮助。请。

template <class T>
class LinkedNode {
  public:
    LinkedNode(T);
    T element;
    LinkedNode<T> *next;
};

template <class T>
LinkedNode<T>::LinkedNode(T e){
    element = e;
    next = 0;
}
///////////////////////////////////////////
template <class E>
class LinkedList {
  public:
    LinkedList();
    void addToHead(E);
    LinkedNode<E> *head, *tail, *temp;
};

template <class E>
LinkedList<E>::LinkedList() {
    head = tail = NULL;
}

template <class E>
void LinkedList<E>::addToHead(E e) {
    LinkedNode<E> a(e);
    if (head == NULL)
        head = tail = &a;
    else {
        a.next = head;
        head = &a;
    }
}

int main(){
    LinkedList<int> list;
    list.addToHead(55);
    list.addToHead(22);
    cout << list.head->element << " trivial "<< list.head->next->element << endl;
}

【问题讨论】:

  • sci:使用 markdown 代码块(而不是 HTML 格式),它会自动转义 。

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


【解决方案1】:

addToHead() 中,您将局部变量的地址 分配给列表的head 元素。该函数返回后,局部变量被销毁,不得访问。

解决此问题的一种方法是使用动态分配来创建一个新的LinkedNode&lt;E&gt;

template <class E>
void LinkedList<E>::addToHead(E e) {
    LinkedNode<E> *a = new LinkedNode<E>(e);
    if (head == NULL)
        head = tail = a;
    else {
        a->next = head;
        head = a;
    }
}

在为该节点分配内存后,您的LinkedList 类还应负责在未来某个时间释放该节点(使用delete)。

【讨论】:

    【解决方案2】:

    LinkedNode a(e); 仅在 addToHead 范围内。一旦函数返回,指向它的指针 (&amp;a) 就会失效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多