数据结构--每天一题-王道&&leetcode -删除线性表中所有值为x的数据元素
删除线性表中所有值为x的数据元素
王道:对长度为n的顺序表L,编写一个时间复杂度O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。
出处:除了王道
北京林业大学
http://www.bjfuacm.com/problem/234
leetcode 27
https://leetcode-cn.com/problems/remove-element/solution/yi-chu-yuan-su-by-leetcode-solution-svxi/
删除线性表中所有值为x的数据元素,可以运行的!!!!!
tips:后缀必须cpp
双指针
先来个方法三:双指针(后面两种书上的)
如果右指针指向的元素不等于 x,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移
如果右指针指向的元素等于 x,它不能在输出数组里,此时左指针不动,右指针右移一位。
区间 [0,left]中的元素都不等于x。当左右指针遍历完输入数组以后,left 的值就是输出数组的长度。
leetcode跑双指针
// An highlighted block
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 50
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int length;
}SqList;
void PrintList(SqList &L)
{
for (int i = 0; i < L.length; i++)
{
printf("%d", L.data[i]);
}
}
void InitList(SqList& L)
{
L.length = 0;
memset(L.data, 0, sizeof(ElemType));
}
int Dele_x3(SqList& L, int x) {
int left = 0;
for (int right = 0; right < L.length; right++) {
if (L.data[right] != x) {
L.data[left] = L.data[right];
left++;
}
}
return left;
}
int main()
{
SqList L;
int n;
ElemType x;