首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的LinkedList类有什么问题?

我的LinkedList类有什么问题?
EN

Stack Overflow用户
提问于 2010-03-22 14:57:15
回答 6查看 312关注 0票数 3
代码语言:javascript
复制
class LinkedList
{
  private:
    int data;  
    LinkedList *ptr;  
public:
  LinkedList(int i_data)  
  { 
    data = i_data;  
    ptr = 0;  
  }  
  ~LinkedList()  
  {  
    delete ptr ;  
  }  
  void insert(LinkedList *node)  
  {  
    while(this->ptr!= 0)  
    this = this->ptr;  

    this->ptr= node;  
  }  
}

我将创建一个像head = new LinkedList(4)这样的头节点,然后像head->insert(new LinkedList(5))一样调用,然后再调用。你能告诉我上面的类代表一个链表吗?我想是的,它有包含下一个节点地址的节点。如果我说错了,请纠正我

EN

回答 6

Stack Overflow用户

发布于 2010-03-22 15:00:26

是的,这个类型当然代表了一个奇特的链表结构,因为它有一个数据槽和一个下一个指针。

不过,我要更改的一件事是insert方法。我的意思是,这个方法接受数据类型会更方便,在本例中是int,让LinkedList类承担分配数据结构的工作。

例如。

代码语言:javascript
复制
void insert(int data) {
    while(this->next != 0)  
    this = this->next;  

    this->next = new LinkedListNode(data);  
}
票数 2
EN

Stack Overflow用户

发布于 2010-03-22 15:07:23

您也将最后一个节点的下一个节点指向NULL

无效插入(LinkedList*节点)

{

代码语言:javascript
复制
 while(this->next != 0)
代码语言:javascript
复制
 this = this->next;  
代码语言:javascript
复制
this->next = node; 
node->next = 0;

}

票数 1
EN

Stack Overflow用户

发布于 2010-03-22 17:06:11

如果需要链表,请使用链表的STL版本。它已经被实现和测试了,在大多数情况下,大多数人都不会实现比它更好的东西。

从代码的角度来看,您不能赋值给this,因此insert方法将不会被编译--在这里考虑使用尾递归。在稍高一点的级别上,你应该更喜欢初始化列表而不是构造函数体中的赋值。您可以考虑使用智能指针来减轻手动管理内存的需要,即使在这种简单的情况下这不是问题。

您应该始终首先考虑接口,然后再考虑如何为其提供实现。特别是,您可能需要的最简单的接口是:

代码语言:javascript
复制
class List {
public:
  List();                   // creates an empty list

  void append( int value ); // adds a new element at the tail of the list
     // push_front( value ) in STL sequence containers

  void insert( int value ); // inserts a new element before the head of the list
     // push_back( value ) in STL sequence containers

  // some way of iterating (I like STL iterators,
  // but Java style iterator --even if worse-- could suffice)
};

事实上,我希望在接口中有更多的东西,但上面的设置是一个最小的方法(其中不包括析构函数,但我当然希望通过实现来管理资源!)。现在,使用您对LinkedList的定义(实际上更接近于节点的定义),您不能创建空列表。您可以在列表的末尾插入append,但不能在列表的第一个元素之前插入。您没有提供从列表中提取数据的工具(!!)

如果您花了几分钟时间思考您可能想要从链表中获得的额外特性(通过迭代器删除给定的元素,以便您可以搜索值X并将其从列表中删除,在列表中的给定位置插入,而不仅仅是头或尾...)您将在接口中提出其他需求,然后您只需要在代码中满足这些需求,这通常要简单得多:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2490450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档