刚学,就当写小记捋一下思路。

链表的创建:

以结构体的形式通过保存下一个目标的地址指针来访问,由此不断推进。

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; (手动释放空间养成好习惯)