要用到尾指针r
示意图如下:
关键步骤:
1先在内存中把新结点找出来,然后给新结点的数据域赋值,然后它的指针域为空
再把新结点接在尾结点的后头,也就是要给尾结点的指针域赋值r->next=p;
然后新插入的结点就是新的尾结点了,所以要移动指针r=p,让指针指向新的尾结点
接下来就可以继续操作下一个了:再在内存当中找到这样一块空间,开辟一个新的结点,然后将新结点记在我们尾结点的后头,然后让新结点变成新的尾结点,这样反复来做,直到所有的结点都插入到链表当中。
算法如下:
刚才头插法是倒位序,倒着从最后一个元素开始一次插入进去,尾插法就不用了,用正位序
用L来存储建好的链表所以它是一个引用型,返回这个链表,n是结点的个数。
第一步先建立头结点:在内存中分配一块空间,用头指针指向它,头结点的next域为空,
因为尾指针也指向头结点,所以将头指针赋值给尾指针
从0到n-1,总共要执行n次,我们把n个结点都插入进去:首先在内存中分配一块空间用指针,用指针变量p指向这块空间,然后输入data域的值
再给它的next域置空,然后新结点就生成了,
我们再把他接在我们当前链表的最后一个结点的后面,即为尾指针的next域赋值,赋的是我们
新开辟好的这个结点
再改变尾指针,让尾指针指向新结点,尾指针的值和p变量的值是一样的,都是指向新结点的指针
总览:
时间复杂度:O(n)
循环体里的语句,循环执行一次,语句里面的就执行一遍,循环n次,他就执行n次,其中循环判断n+1次,他们的数量级都是n