从链表中删除节点,可以被2整除

时间:2015-11-24 15:52:21

标签: c++ algorithm data-structures

想要在我的List类中添加一个函数来删除可被2整除的节点。

{ "considerIp": false, "wifiAccessPoints": [ ... ] } 部分正在运作,但在if案例中无效。

else

2 个答案:

答案 0 :(得分:0)

一般情况下,我在else分支中看到两个问题:

  1. 您不会重新链接下一个节点以保持链接列表链接。
  2. 发生这种情况时:

        Node* P=T;
        T=T->link;
    

    由于循环开始时T=T->link;,将跳过下一个迭代节点。

答案 1 :(得分:0)

我认为第一个节点的原始特殊情况是不合理的,但是还需要第一个节点的特殊情况是链表的风格很差。使用指向指针Node**的指针可以更好地解决第一个节点拥有的不同于以后所有节点的一般问题:

void List::ClearDv() {
   Node** p = &m_first;
   while ( *p )
   {
      Node* t=*p;
      if ( t->info % 2 )
      {
         p = &(t->link);  // Advance to next Node
      }
      else
      {
         *p = t->link;  // Unlink Node t
         delete t;   // Then delete it.
      }
   }
}

请注意,关键操作% 2只出现在代码中的一个位置。不需要基于原始大小的特殊情况。不需要以不同方式取消第一节点与任何其他节点的链接。代码通常更易于测试和维护,因为每个操作都在最少的地方完成。