小小麦兜兜 发表于 2020-7-29 13:07:58

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

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;
}

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

我在这呢 发表于 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;
        }

}

我在这呢 发表于 2020-10-22 11:22:40

先找到插入的前一个结点,判断插入的结点是否为空,然后就直接插入就行了
页: [1]
查看完整版本: 关于链表的插入,我感觉我写的好复杂,请教一下优化办法