当前位置: 首页 > 知识库问答 >
问题:

双链接列表中的空对象模式

金高轩
2023-03-14

我试图在c语言中的双链表中使用null对象模式,但我似乎找不到一种在保持代码整洁的同时使用它的方法。

问题出在以下代码中:

node->getNext()->setPrevious(node->getPrevious());
node->getPrevious()->setNext(node->getNext());

如果下一个/上一个节点是nullptr,则getNextgetPrevious将返回NullNode对象。

此操作失败的用例-当节点为头节点时:

下面将第二个节点的上一个指针设置为导致内存泄漏的NullNode对象。

node->getNext()->setPrevious(node->getPrevious());

我在这里要做的是保持NOP,保持代码干净,不受nullptr和类类型比较的影响,

任何建议都将不胜感激!

共有1个答案

卓云
2023-03-14

如果你存储上一个和下一个节点,事情会更简单,就像这样:

Node* Detach( Node* node) {
  auto prev = node->getPrevious();
  auto next = node->getNext();
  prev->setNext( next );
  next->setPrevious( prev);

  node->setNext( nullNodeAddr);
  node->setPrevious( nullNodeAddr);

  return node;
}

NOP或Sentinel模式是一种简化操作的方法,它从不关心列表开头和结尾的空值。如果你需要在某个地方进行测试,那么你就失败了。

 类似资料:
  • 我正在尝试创建二维双链接圆形阵列,从txt文件读取数据并自动创建节点。我的程序正在正确地读取第一行,但当它到达下一行并开始创建下一个节点时,会出现空指针。我不明白为什么会这样,请帮帮我。 这些都是错误。Null指针在尝试创建第二个节点时发生。它正确地创建第一个节点,而不是紧接着创建空指针。 第77行=位置next=n; 第69行=插入后(head.prev, x); 第18行=mList。镶片(k

  • 我有一个我制作的Some_class类型的链表,在类中,我创建了一个方法来插入和显示一些数据。在主类中,我创建了一个类型为Some_class的链接列表,我也创建了一个对象。我用我的插入方法调用了对象,它很好。然后我在链接列表中添加了对象,如下所示: 我想访问linkedlist中的此对象,并显示其数据。我可以使用我在类中创建的show\u data方法,但我有一个例子,我想显示linkedlis

  • 我的头指针应该是空的,因为我不希望在创建链接列表时它有任何值。 我知道不能取消对空值的引用,但我只想将它的下一个节点指向新的节点。有人能解释一下我如何指向头部节点指针吗?

  • 我已经得到了实现双向链表的框架。我被PushFront()方法难住了。方法应该将提供的元素添加到链表的前面,并且应该将地址返回到新的头节点。我对如何访问列表的当前头部感到困惑,以便我可以将其分配给pNext指针。到目前为止,PushTop()方法看起来是这样的: 元素类构造函数: 数据类: 主要: 我的理解是,您通常会在调用PushFron()时提供头的地址,但是因为我没有提供,我不确定如何访问它

  • 我必须实现类"DoubleChainedList"和"Elem"。DoubleChainedList管理一个双链列表,Elem是关联的节点类,指针指向后继节点和前驱节点。 我必须实施以下方法: public void removeAtIndex(int i)//删除位置i处的元素 public int[]toArray()//将列表作为数组返回 双链列表 要素: 我的问题:它显示了以下错误:hea