day7: homework-LinkedList 链表的实现

This commit is contained in:
flykhan 2023-08-01 22:21:52 +08:00
parent 5ab334d200
commit c127a3a81b
1 changed files with 22 additions and 9 deletions

View File

@ -6,7 +6,7 @@ using namespace std;
template <typename T>
class LinkedList
{
// 使用友元函数模版的方式,可以避免重复声明
// // 使用友元函数模版的方式,可以避免重复声明
template <typename U>
friend ostream &operator<<(ostream &out, const LinkedList<U> &list);
@ -104,21 +104,34 @@ public:
size--; // 计数器减一
return *this; // 返回当前对象
}
Node *search(T val)
void search(T val)
{
Node *p = head;
while (p != nullptr && p->val != val)
{
p = p->next; // 找到要删除的节点的前一个节点
}
return p; // 返回找到的节点,如果未找到,返回 nullptr
if (p == nullptr) // 找到最后也没有找到要查找的节点
{
cout << val << " 未找到" << endl;
return;
}
cout << val << " 已找到" << endl;
return;
}
};
template <typename U>
ostream &operator<<(ostream &out, const LinkedList<U> &list)
{
LinkedList p = list; // 从头节点开始
/*
typename LinkedList<U>::Node
LinkedList<U>::Node LinkedList<U> Node
*p Node
list.head
*/
// 注意,由于 Node 是一个内部嵌套结构体,所以在使用时需要使用 typename 关键字来指示其是一个类型名
typename LinkedList<U>::Node *p = list.head; // 从头节点开始
while (p != nullptr) // 遍历链表
{
out << p->val << " "; // 输出节点的值
@ -133,8 +146,8 @@ int main()
LinkedList<double> list; // 创建一个链表
list.insert(1.1).insert(2.2).insert(3.3).insert(4.4).insert(5.5); // 插入节点
cout << list; // 输出链表
Node *tmp = list.search(3.3); // 查找节点
cout << tmp->val << endl;
list.search(3.9); // 查找节点
list.search(4.4); // 查找节点
list.remove(3.3); // 删除节点
cout << list; // 输出链表
return 0;