day7: homework-LinkedList 链表的实现
This commit is contained in:
parent
5ab334d200
commit
c127a3a81b
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue