指定结点前插和指定结点后插
//指定结点p的前插操作
要前插,就要找到p的前驱结点,一种方法是遍历找到p的前驱结点q,再对q进行后插----此方法时间复杂度高O(n^2)
好方法是只要修改p和待插入元素的指针域即可,然后交换数据域-----此方法时间复杂度高O(1)
算法思想:
1.在指定结点p之后插入结点
2.交换数据域
代码:
bool Insert_Prior_node(LNode *p, ElemType e)
{
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->next=p->next;
p->next=s; //将结点s连接到p后
s->data=p->data; //将p中的元素复制到s中
p->data=e; //p中元素为e---即为要插入的元素
return true;
}
//指定结点p的后插操作
算法思想:
1.在指定结点p之后插入结点
该算法时间复杂度为 O(1)
代码:
bool Insert_next_node(LNode *p, ElemType e)
{
if(p==NULL) //空表,i值不合法
return false;
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
if(s==NULL) //某些情况下有可能分配失败 最好加上该语句
return false;
s->data=e;
s->next=p->next;
p-next=s; //将结点s连接到p后
return true;
}