一.线性表
1.顺序表中删除所有值为x的元素,时间复杂度为O(n)
若采用从头遍历并删除 则O(n方)
思想:在原表基础上重建一个不含值为x的元素 使用2个指示器
m=0,n=0;
while(m!=L->last){
if(array[m]!=x){
array[n]=array[m];
m++,n++;
}
else{
m++;
}
L->last=j-1;//⚠️新表最后一个元素置入后 计数器m,n仍++ 所以需-1
}
2.带头节点单链表就地逆置
//思想:目标L->next=p(当前节点)类头插法
p=L->next;
L->next=null;//逆置新表为空
while(p!=null)//从首元节点开始,循环结束条件
{
q=p->next;
//头插法
p->next=L->next;
L->next=p;
p=q;
}
3.带头节点单链表,第一个元素为标准,小的在其前,大的在其后
思想:遍历+判断 小的按头插法在左边,小的修改指针域
三个关键指针 ,指向头节点 指向当前节点 指向下一个节点 记录前一个节点
pl=L->next;//头节点,因为L->next可能一直变化
pre=pl;//前一个
p=pl->next;//当前处理
while(p!=null){
q=p->next;//下一个处理节点
if(p->data>=pl->data){
pre=p,p=q;
}
else{
pre->next&#