刚学,就当写小记捋一下思路。
链表的创建:
以结构体的形式通过保存下一个目标的地址指针来访问,由此不断推进。
struct list{
int data;
list *next;//指向下一个目标的指针,由此可以做到单向推进。(通过添加关系也可以实现双向链表和循环链表)
};
开辟空间:
list *head=new list();//这里的头并没有存数据(会有需要头指针存数据的情况吗?
head->next=NULL;
链表的遍历:
list *t=head->next;//创建一个空对象指向头指针的下一位,也就是说第一位是头指针的下一位喽
while(t!=NULL){//如果存在下一位指向空,说明到头了,形如开辟的时候把头的下一位填为空,
后续建新点的时候也会用到,作为循环停止的标志,(防止访问到以外的空间?)
cout<<t->data<<" ";
t=t->next;//推进
}
插入:找到位置的方法形如遍历,条件换一下,就不赘述了。
丑丑地画一下,如果要插入一个新的点,第一步给他创建点,第二步把原来的next传给他,最后在把原来点的next
指向新建的点,原本的关系自然就断了。
list *t=new list();//创建 t为新点,q为原来的点
t->data=y; //三步走
q->next=t;
t->next=p;
删除:删除点就是插入点反过来啦此时就不用创建了。p为原点,q为要删除的点
p->next=q->next;
q->next=NULL;
这样已经改变了下位的关系
delete q; (手动释放空间养成好习惯)