单链表插入,删除,查询,输出的方式

下面这个例子包含单链表的头或尾还有中间增加节点,删除节点,析构new出的空间,及其他代码。


#include<iostream>

#include<string>
using namespace std;
class Student            \\student类相当于节点Node中储存数据的date
{
public:
int id;
string name;
Student() {}
Student(int id, string name) :id(id), name(name) {}
void display()
{
cout << id << ' ' << name << endl;
}
};
class Node
{
public:
Student data;
Node *next;     \\指向下一节点的指针
Node()            \\不含参的构造函数
{
next = nullptr;   
}
Node(Student s)
{
data = s;
next = nullptr;
}
Node(Node *p)
{
this->data = p->data;
this->next = nullptr;
}
void display()
{
data.display();
}
};
class Link
{
public:
Node * head;  \\定义头结点
Link()
{
head = new Node();   
}
void addNodeTail(Node *p)
{
Node *q = head;
while (q->next != nullptr)
{
q = q->next;
}
//q->next = p;
Node *temp = new Node(p);    \\ new出新空间后,*temp=*p
q->next = temp;
}
void addNodeHead(Node *p)   \\在头部插入节点
{
//p->next = head->next;    
//head->next = p;                \\这些方法也行
Node *temp = new Node(p);
temp->next = head->next;
head->next = temp;
}
void addNodeByOrder(Node *p)  \\在中间插入节点
{
Node *q1 = head;
Node *q2 = head->next;
while (q2 != nullptr && q2->data.id < p->data.id)
{
q1 = q1->next;
q2 = q2->next;
}
Node *temp = new Node(p);
temp->next = q1->next;
q1->next = temp;
}
void deleteByID(int id)     \\通过查询id删除
{
Node *q1 = head;
Node *q2 = head->next;
while (q2 != nullptr && q2->data.id != id)
{
q1 = q1->next;
q2 = q2->next;
}
if (q2 != nullptr)
{
q1->next = q2->next;
delete q2;
}


}
void display()    \\输出
{
Node *q = head->next;//q指向第二个节点
while (q != nullptr)
{
q->display();
q = q->next;
}
}
~Link()    \\ 析构
{
Node *q = head;
while (q != nullptr)
{
Node *temp = q->next;
delete q;
q = temp;
}
}
};
int main()
{
Node n1(Student(1, "AAA"));
Node n2(Student(2, "BBB"));
Node n3(Student(3, "CCC"));
Link link;
link.addNodeByOrder(&n3);
link.addNodeByOrder(&n1);
link.addNodeByOrder(&n2);


link.display();
cout << endl;
return 0;

}


如果觉得对你有帮助的话,麻烦点个赞,给我写下去的动力,谢谢!

猜你喜欢

转载自blog.csdn.net/a66666_/article/details/79844540