From c127a3a81b034a863e244c7c0a66b1f795a491d0 Mon Sep 17 00:00:00 2001 From: flykhan Date: Tue, 1 Aug 2023 22:21:52 +0800 Subject: [PATCH] =?UTF-8?q?day7:=20homework-LinkedList=20=E9=93=BE?= =?UTF-8?q?=E8=A1=A8=E7=9A=84=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day7/homework/h5.cpp | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/day7/homework/h5.cpp b/day7/homework/h5.cpp index 1d83f78..e1415fb 100644 --- a/day7/homework/h5.cpp +++ b/day7/homework/h5.cpp @@ -6,7 +6,7 @@ using namespace std; template class LinkedList { - // 使用友元函数模版的方式,可以避免重复声明 + // // 使用友元函数模版的方式,可以避免重复声明 template friend ostream &operator<<(ostream &out, const LinkedList &list); @@ -104,22 +104,35 @@ 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 ostream &operator<<(ostream &out, const LinkedList &list) { - LinkedList p = list; // 从头节点开始 - while (p != nullptr) // 遍历链表 + /* + typename 关键字告诉编译器 LinkedList::Node 是一个类型名,而不是一个成员变量 + LinkedList::Node 表示 LinkedList 类的嵌套类型 Node + *p 指向 Node 类型的对象 + list.head 是链表的头节点指针 + */ + // 注意,由于 Node 是一个内部嵌套结构体,所以在使用时需要使用 typename 关键字来指示其是一个类型名 + typename LinkedList::Node *p = list.head; // 从头节点开始 + while (p != nullptr) // 遍历链表 { out << p->val << " "; // 输出节点的值 p = p->next; // 指向下一个节点 @@ -133,9 +146,9 @@ int main() LinkedList 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.remove(3.3); // 删除节点 - cout << list; // 输出链表 + list.search(3.9); // 查找节点 + list.search(4.4); // 查找节点 + list.remove(3.3); // 删除节点 + cout << list; // 输出链表 return 0; }