关于链表的插入,我感觉我写的好复杂,请教一下优化办法
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;
}
我发现我要把插入到第一个的写个判断,插入位置非法自动插入到表尾又一个判断,最后才是插入正常位置,有没有办法合并优化一下~~~以上代码是自己理解范围内写的,插入是没有问题了,但是总感觉太长了好业余,希望各位大神们如果帮忙的话,记得打上注释我新手好理解!!! 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;
}
} 先找到插入的前一个结点,判断插入的结点是否为空,然后就直接插入就行了
页:
[1]