链表保留函数不起作用
Linked List Retain Function Not Working
这是数据结构课程上的一项旧作业。目标是完成retain函数,其工作方式如下:listy.retain(listx(,结果是删除listy中不包含在listx中的元素。
我试着写自己的代码如下。
template<class Type>
void linkedList<Type>::retain(const linkedList<Type>& other)
{
// Implement this function
node<Type>* y = first;
node<Type>* x;
while(y != NULL)
{
x = other.first;
while(x != NULL)
{
if(x->info == y->info)
break;
}
if(x == NULL)
remove(x->info);
y = y->link;
}
}
此外,所使用的remove函数在赋值的一部分中提供。
template<class Type>
void linkedList<Type>::remove(const Type& x)
{ //remove the first instance of x in the list
node<Type> *p, *q;
p = first;
q = NULL;
while (p != NULL && p->info != x)
{
q = p;
p = p->link;
}
if (p != NULL)
{
if (p == first)
first = first->link;
else
q->link = p->link;
if (p == last)
last = q;
delete p;
count--;
}
}
它的构建没有错误,但最初它应该显示新的listy,但现在它在初始条件后完全停止输出。
**** Part-1 unordered linkedList ****
-- Test 1A --
listx (len = 7) : 5 3 7 7 5 4 3
listy (len = 7) : 2 8 4 7 3 1 9
有什么想法吗??这是我第一次发帖,所以欢迎任何反馈,并提前感谢!
retain
有一个无限循环。
x = other.first;
while(x != NULL)
{
if(x->info == y->info)
break;
}
如果循环时的第一个x->info != y->info
由于x
没有被改变而对同一节点x
重复相同的迭代。
这个声明
if(x == NULL)
remove(x->info);
应替换为
if(x == NULL)
remove(y->info);
但在任何情况下,移除函数retain中的节点都比单独调用函数remove要好。
这个声明
y = y->link;
如果节点y将被函数remove的前一个调用删除,则可能导致未定义的行为。
至少内环应该看起来像
x = other.first;
while( x != NULL && x->info != y->info ) x = x->link;
if ( x == NULL )
{
node<Type>* tmp = y->link;
remove( y->info );
y = tmp;
}
else
{
y = y->link;
}
此外,您还应该检查交付节点是否为节点first
。否则,节点first
可能无效。
我相信if(x==NULL(删除(x->info(;应该是if(x!=NULL(删除(x->info(;
相关文章:
- C++为什么尽管我调用了void函数,它却不起作用
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 为什么我的数组双精度函数不起作用?
- 使用 va_arg 传递给函数va_list不起作用
- Windows.h 输入在函数之外不起作用
- 类和构造函数中的函数根本不起作用,并且不返回任何错误
- 类中的虚拟布尔函数参数不起作用
- getline 函数似乎在 C++ 中不起作用
- 将新放置与 std::函数一起使用不起作用
- binary_search() 函数在我的函数体中不起作用
- 为什么读取函数在 sha1 c++ 实现中不起作用?
- 在函数中声明的 ifStream 对象在发布模式下不起作用
- 指针变量在 cout 函数中不起作用
- std::函数不起作用,但普通的旧函数指针可以 - 为什么?
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- 为什么必须使用'*p=a',而使用'p=&a'在构造函数中不起作用
- C++ Arduino - 随机函数不起作用
- QObject::连接不起作用 - 使用函数语法找不到信号
- 函数在类中不起作用-函数调用缺少参数列表