鱼C论坛

 找回密码
 立即注册
查看: 2909|回复: 3

[已解决]关于单链表的问题

[复制链接]
发表于 2018-8-26 15:54:22 | 显示全部楼层 |阅读模式
5鱼币

单链表问题

单链表问题

最佳答案
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;
        }

最佳答案

查看完整内容

已经创建好单链表了(如果有哨兵的情况下就是第一个头结点不存任何数据,只作为链表头,保存元素第二个节点开始),步骤大体如下,根据自己参考: 每次会遍历到尾部插入 插入复杂度为0(n) 这种写法叫做追加插入更为合适 问题解决思路:不是数组吗? 数组遍历循环去调用这个函数插入到链表,把数组中的值追加插入就好了 Links* Insert(Links* Phead) { Links* ptr = Phead->next; // 头节点第下一个才保存元素,如果头结 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-26 20:43:49 | 显示全部楼层
原谅我没有看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-8-26 20:48:36 | 显示全部楼层

就是建表、查找,我在创建单链表之后,不知道怎么将数组中的元素放进去。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 12:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表