本帖最后由 理想小青年 于 2018-8-27 07:41 编辑
已经创建好单链表了(如果有哨兵的情况下就是第一个头结点不存任何数据,只作为链表头,保存元素第二个节点开始),步骤大体如下,根据自己参考:
每次会遍历到尾部插入 插入复杂度为0(n) 这种写法叫做追加插入更为合适
问题解决思路:不是数组吗? 数组遍历循环去调用这个函数插入到链表,把数组中的值追加插入就好了
Links* Insert(Links* Phead)
{
Links* ptr = Phead->next; // 头节点第下一个才保存元素,如果头结点就是元素保存第一个则不用ptr->next
Links* PNew = (Links *)malloc(sizeof(Links)); // 申请堆空间
if(NULL == PNew)
{
printf("分配内存失败\n");
exit(EXIT_FAILURE);
}
/*两种情况:1、链表为空插入*/
if(NULL == ptr) // 判断头结点是否为空 也就是单链表是否为空
{
Phead->next = PNew; // 保存元素节点指向新建堆空间
PNew->next = NULL; // 新节点的下一个指向NULL
}
/*2、链表不为空插入*/
else
{
while(NULL != ptr->next)
ptr = ptr->next;
ptr->next = PNew;
PNew->next = NULL;
}
return Phead;
}
插入位置需要多传进来一个const int *arr 函数原型:int Insert(Links* Phead, const int *arr);
比如调用:
(这里注意 不可以sizeof(arr)大小 因为是指针4个字节,应该获取数组长度)
for(int i = 0 ; i < length; i++)
{
Insert(&Phead, arr); // 调用链表函数
++arr;
}