一、定义结构体
1.定义一个包含本结构体的指针
C++样式
class Student
{
private:
//这里定义所需要的数据类型
public:
Student* m_next;//结构体指针
};
C样式
struct Student
{
//这里定义所需要的数据类型
Student* m_next;//结构体指针
};
二、定义一个头指针(单向链表)
1.在全局区定义头指针
在全局区定义是为了便于经行使用,不需要在函数中传参。
头指针
Student* head = NULL;
三、链表节点的增加
1.头插法
C++样式
void AddNode()
{
Student* NewNode = new Student; //申请一个新节点
NewNode->m_next = NULL; //将新节点的指针指向空,防止野指针的出现
if (head == NULL) { //如果头指针指向空,则令头指针指向新节点
head = NewNode;
}else{ //否则,把头指针接到新节点的后面,再让头指针指向新节点
NewNode->m_next = head;
head = NewNode;
}
}
C 样式
malloc的使用要添加stdlib.h的头文件
malloc的返回值需要强类型转换为对应数据类型才能被接收
void AddNode()
{
Student* NewNode = (Student*)malloc(sizeof(Student)); //申请一个新节点
NewNode->m_next = NULL; //将新节点的指针指向空,防止野指针的出现
if (head == NULL) { //如果头指针指向空,则令头指针指向新节点
head = NewNode;
}
else { //否则,把头指针接到新节点的后面,再让头指针指向新节点
NewNode->m_next = head;
head = NewNode;
}
}
2.尾插法
C++样式
void AddNode()
{
Student* NewNode = new Student; //申请一个新节点
NewNode->m_next = NULL; //将新节点的指针指向空,防止野指针的出现
if (head == NULL) { //如果头指针指向空,则令头指针指向新节点
head = NewNode;
}
else { //否则,取一个暂时的结构指针,遍历到链表尾部
Student* pause = head;
while (pause->m_next != NULL) {
pause = pause->m_next;
}
pause->m_next = NewNode; //将新节点接入链表尾部
}
}
C样式
void AddNode()
{
Student* NewNode = (Student*)malloc(sizeof(Student)); //申请一个新节点
NewNode->m_next = NULL; //将新节点的指针指向空,防止野指针的出现
if (head == NULL) { //如果头指针指向空,则令头指针指向新节点
head = NewNode;
}
else { //否则,取一个暂时的结构指针,遍历到链表尾部
Student* pause = head;
while (pause->m_next != NULL) {
pause = pause->m_next;
}
pause->m_next = NewNode; //将新节点接入链表尾部
}
}
四、链表节点的删除
1.头节点的删除
C++样式
void DeleteNode()
{
Student* pause = head, *pause1 = head;
//此处获取数据
while (pause->m_next != NULL) { //遍历链表寻找
if (pause./*数据*/ == /*获得的数据*/) { //寻找与对于数据符合的链表节点
if (pause = head) {
head = pause->m_next;
delete pause; //当节点为头节点时将链表节点释放
return;
}
while (pause1->m_next != pause) {
pause1 = pause1->m_next;
}
pause1->m_next = pause->m_next;
delete pause; //将与该数据符合的链表节点释放
return;
}
pause = pause->m_next; //外部指针在链表上移动
}
}
C样式
void DeleteNode()
{
Student* pause = head, * pause1 = head;
//此处获取数据
while (pause->m_next != NULL) { //遍历链表寻找
if (pause./*数据*/ == /*获得的数据*/) { //寻找与对于数据符合的链表节点
if (pause = head) {
head = pause->m_next;
free pause; //当节点为头节点时将链表节点释放
return;
}
while (pause1->m_next != pause) {
pause1 = pause1->m_next;
}
pause1->m_next = pause->m_next;
free pause; //将与该数据符合的链表节点释放
return;
}
pause = pause->m_next; //外部指针在链表上移动
}
}