Kitty喜欢小鱼干 发表于 2018-8-26 15:54:22

关于单链表的问题


理想小青年 发表于 2018-8-26 15:54:23

本帖最后由 理想小青年 于 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;
        }

理想小青年 发表于 2018-8-26 20:43:49

原谅我没有看懂

Kitty喜欢小鱼干 发表于 2018-8-26 20:48:36

理想小青年 发表于 2018-8-26 20:43
原谅我没有看懂

就是建表、查找,我在创建单链表之后,不知道怎么将数组中的元素放进去。
页: [1]
查看完整版本: 关于单链表的问题