void Linklist::insert_tail(string name)// 尾插 { worker* p = head; // 指针变量 p 指向 head 所指向的内存地址。 worker* new_worker = new worker(name);//创建一个名为 new_worker 的 worker 对象,并将其 next 指针设置为 NULL。 new_worker->next = NULL; if (p == NULL) { p = new_worker; } else { while (p->next != NULL) { p = p->next; } p->next = new_worker; } }
时间: 2023-04-06 16:03:09 浏览: 95
这是一个关于链表的代码实现问题,可以回答。该函数实现的是将一个名为 name 的工人对象插入到链表的尾部。具体实现是先创建一个新的工人对象 new_worker,然后将其 next 指针设置为 NULL。接着判断链表是否为空,如果为空,则将头指针指向新的工人对象;否则,遍历链表找到最后一个工人对象,将其 next 指针指向新的工人对象。
相关问题
worker* Linklist::find_name(string name) //按姓名查找 { worker* p = head; while (p->next != NULL) { if (p->next->m_name == name) { p->next->print(); return p->next; } else { p = p->next; } } cout << "该员工不存在!" << endl; }解释这段代码的原理
这段代码是一个链表查找函数,根据输入的姓名在链表中查找对应的员工信息。函数首先将链表头节点赋值给指针p,然后通过while循环遍历链表,如果找到了对应姓名的员工信息,则输出该员工信息并返回该员工节点的指针;如果遍历完整个链表都没有找到对应姓名的员工信息,则输出提示信息。该函数的原理是通过遍历链表,逐一比较每个节点的姓名属性,找到对应姓名的员工信息。
int Linklist::delete_name(string name) //按值删除 { worker* p = head; int count = 0; while (p->next != NULL) { if (p->next->m_name == name) { worker* ptr = p->next; p->next = ptr->next; free(ptr); count++; } else { p = p->next; } } if (count == 0) { cout << "未发现该名员工!" << endl; return -1; } }解释这段代码的原理
这段代码是一个链表中按照员工姓名删除节点的函数。它首先定义了一个指向链表头节点的指针p,然后通过循环遍历链表,查找与给定姓名相同的节点。如果找到了这样的节点,它会用一个指针ptr指向该节点,然后将该节点从链表中删除,并释放该节点的内存空间。最后,它会返回删除的节点数。如果没有找到与给定姓名相同的节点,它会输出一条提示信息并返回-1。
阅读全文