鱼C论坛

 找回密码
 立即注册
查看: 3168|回复: 2

关于链表的插入,我感觉我写的好复杂,请教一下优化办法

[复制链接]
发表于 2020-7-29 13:07:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void insert_Linked(list* head, int pos, int x)
{
        list* temp = head->next;
        list* node = NULL;
        node = initial_data(node);

        if (pos <= 0 || pos >= head->length)        //判断插入位置非法自动插入最后一个
        {
                printf("插入到最后一个元素!");
                while (temp != NULL && temp->next != NULL)
                {
                        temp = temp->next;
                }
                node->data = x;
                temp->next = node;
                head->length++;                //长度++ 
                return;
        }

        if (pos == 1)        // 判断插入位置是1的情况
        {
                node->data = x;
                head->next = node;
                node->next = temp;
                head->length++;
                return;
        }

        int i = 1;
        while (i<pos-1 && temp != NULL)        //判断循环次数且表不为空
        {
                temp = temp->next;
                i++;
        }
        node->data = x;
        node->next = temp->next;
        temp->next = node;
        head->length++;

        return;
}

我发现我要把插入到第一个的写个判断,插入位置非法自动插入到表尾又一个判断,最后才是插入正常位置,有没有办法合并优化一下~~~以上代码是自己理解范围内写的,插入是没有问题了,但是总感觉太长了好业余,希望各位大神们如果帮忙的话,记得打上注释我新手好理解!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-22 11:21:14 | 显示全部楼层
bool ListInsert(LinkNode*& L, int i, ElemType e)
{
        int j = 0;
        LinkNode* p = L, * s;
        if (i <= 0) return false;
        while (j < i - 1 && p != NULL)
        {
                j++;
                p = p->next;
        }       
        if (p == NULL)
                return false;
        else
        {
                s = (LinkNode*)malloc(sizeof(LinkNode));
                s->data = e;
                s->next = p->next;
                p->next = s;
                return true;
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 11:22:40 | 显示全部楼层
先找到插入的前一个结点,判断插入的结点是否为空,然后就直接插入就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 19:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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