day7: homework-LinkedList 链表的实现
This commit is contained in:
parent
5ab334d200
commit
c127a3a81b
|
@ -6,7 +6,7 @@ using namespace std;
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class LinkedList
|
class LinkedList
|
||||||
{
|
{
|
||||||
// 使用友元函数模版的方式,可以避免重复声明
|
// // 使用友元函数模版的方式,可以避免重复声明
|
||||||
template <typename U>
|
template <typename U>
|
||||||
friend ostream &operator<<(ostream &out, const LinkedList<U> &list);
|
friend ostream &operator<<(ostream &out, const LinkedList<U> &list);
|
||||||
|
|
||||||
|
@ -104,21 +104,34 @@ public:
|
||||||
size--; // 计数器减一
|
size--; // 计数器减一
|
||||||
return *this; // 返回当前对象
|
return *this; // 返回当前对象
|
||||||
}
|
}
|
||||||
Node *search(T val)
|
void search(T val)
|
||||||
{
|
{
|
||||||
Node *p = head;
|
Node *p = head;
|
||||||
while (p != nullptr && p->val != val)
|
while (p != nullptr && p->val != val)
|
||||||
{
|
{
|
||||||
p = p->next; // 找到要删除的节点的前一个节点
|
p = p->next; // 找到要删除的节点的前一个节点
|
||||||
}
|
}
|
||||||
return p; // 返回找到的节点,如果未找到,返回 nullptr
|
if (p == nullptr) // 找到最后也没有找到要查找的节点
|
||||||
|
{
|
||||||
|
cout << val << " 未找到" << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cout << val << " 已找到" << endl;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename U>
|
template <typename U>
|
||||||
ostream &operator<<(ostream &out, const LinkedList<U> &list)
|
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) // 遍历链表
|
while (p != nullptr) // 遍历链表
|
||||||
{
|
{
|
||||||
out << p->val << " "; // 输出节点的值
|
out << p->val << " "; // 输出节点的值
|
||||||
|
@ -133,8 +146,8 @@ int main()
|
||||||
LinkedList<double> list; // 创建一个链表
|
LinkedList<double> list; // 创建一个链表
|
||||||
list.insert(1.1).insert(2.2).insert(3.3).insert(4.4).insert(5.5); // 插入节点
|
list.insert(1.1).insert(2.2).insert(3.3).insert(4.4).insert(5.5); // 插入节点
|
||||||
cout << list; // 输出链表
|
cout << list; // 输出链表
|
||||||
Node *tmp = list.search(3.3); // 查找节点
|
list.search(3.9); // 查找节点
|
||||||
cout << tmp->val << endl;
|
list.search(4.4); // 查找节点
|
||||||
list.remove(3.3); // 删除节点
|
list.remove(3.3); // 删除节点
|
||||||
cout << list; // 输出链表
|
cout << list; // 输出链表
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue