/*
指针知识复习:
int *p = new int; //此时指针p指向一个int对象,该对象没有被初始化
int *p = new int(0); //指针p指向一个int对象,该对象被初始化为0
int *p = new int[10]; //指针p指向一个int型数组,该数组未被初始化
int *p = new int[10](0); //指针p指向一个int型数组,该数组的元素都被初始化为0
new就是在程序的堆区申请一个没有命名的空间,你可以把new看成是一个系统内置的函数,该函数返回一个指向没有命名的空间地址(也就是指针).
另外,对于new申请的空间,程序员必须显示的删除该内存空间,用delete删除,比如这样,delete p,和delete[] p,前者是删除单个对象,后者是删除一个数组
*/
#include <iostream>
using namespace std;
class linkNode //这里创建一个结构体用来表示链表的节点类型
{
public:
int data;
linkNode *next;
};
int main()
{
//=================================================初始化================================================================
int n,i,num;
linkNode *head; //定义一个头指针
linkNode *currentPoint; //定义一个指向节点的指针,这个是一个指向【当前节点】的指针
linkNode *lastPoint; //定义一个指向节点的指针,不过这个 指向【上一个节点】的指针
cin>>n;
head = NULL; //一开始头指针为空,意思是这个链表还没有东西
//=================================================把 n 个数存入链表中================================================================
for (i=0;i<n;i++)
{
cin>>num;
currentPoint = new linkNode; //创建一个新节点。指针point 指向一个 【linkNode类型的对象】(节点)
currentPoint->data = num; //把数据存入新节点的 data 域中
currentPoint->next = NULL; //设置当前节点的后继指针为空,也就是当前节点的下一个节点为空
if (head == NULL)
head = currentPoint; //如果这是第一个创建的节点,则将头指针指向这个节点
else
lastPoint->next = currentPoint; //如果这不是第一个创建的节点,则将上一个节点的的后继指针指向当前节点
lastPoint = currentPoint; //指针lastPoint 也指向当前节点
}
currentPoint->next = NULL; //将最后一个节点的后继指针设为NULL,标明这是一个尾节点
/*
//=================================================插入节点================================================================
int x; //需要插入的数
int no = 0; //需要插入在第 no 个节点之后
int tmp = 0; //用于计数
linkNode *t = head; //用来遍历节点的指针
cin>>x>>no;
if (no==0) //如果要插入在第一个节点
{
currentPoint = new linkNode;
currentPoint->data = x;
currentPoint->next = head;
head = currentPoint;
}
else //如果要插入在中间 或者 最后一个节点
{
while(t!=NULL)
{
tmp++;
if (tmp==no || t->next==NULL)
{
currentPoint = new linkNode;
currentPoint->data = x;
currentPoint->next = t->next;
t->next = currentPoint;
break; //插入完成后即退出循环
}
t = t->next; //***遍历下一个节点
}
}
*/
//=================================================删除节点================================================================
int y; //要删除第 y 个节点
int tmp1 = 0; //用来计数
linkNode *del; //创建一个指向要删除的节点的指针
linkNode *t = head; //遍历用的指针
cin>>y;
if (y==1) //如果要删除第 1 个节点
{
del = head;
head = del->next;
delete del;
}
else //如果是要删除后面的节点
{
while (t!=NULL)
{
tmp1++;
if (t->next==NULL)
cout<<"你要删除的节点是一个空节点,请重新输入一个新的节点"<<endl;
else if (tmp1==y-1)
{
del = t->next;
t->next = del->next;
delete del;
break;
}
t = t->next; //***遍历下一个指针
}
}
//=================================================输入链表中的内容================================================================
t = head; //定义一个指向【头节点】的指针,用来遍历
while (t!=NULL)
{
cout<<t->data<<' ';
t = t->next; //指向下一个节点
}
return 0;
}
链表实现
最新推荐文章于 2023-06-21 23:43:49 发布