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

本文详细介绍了单链表的基本操作,包括在头、尾及中间位置插入节点,按ID删除节点,以及释放内存等。通过具体示例展示了如何实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面这个例子包含单链表的头或尾还有中间增加节点,删除节点,析构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;

}

 

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值