从线性表中删除重复元素
时间: 2023-12-04 14:01:13 浏览: 51
可以使用双指针法来删除线性表中的重复元素。具体做法如下:
1. 初始化两个指针i和j,分别指向线性表的第一个元素和第二个元素。
2. 依次比较i和j指向的元素是否相同,如果相同,则将j指针向后移动一位,直到找到第一个与i指向的元素不同的元素。
3. 将i指针向后移动一位,并将j指针指向的元素复制到i指针指向的位置上,然后将j指针向后移动一位。
4. 重复步骤2和步骤3,直到j指针遍历完整个线性表。
示例代码如下:
```python
def remove_duplicates(nums):
if not nums:
return 0
i = 0
for j in range(1, len(nums)):
if nums[j] != nums[i]:
i += 1
nums[i] = nums[j]
return i + 1
```
时间复杂度为O(n),空间复杂度为O(1)。
相关问题
合并两个线性表,删除重复的元素;
好的,让我来解答你的问题。
合并两个线性表并删除重复的元素,可以采用以下方法:
1. 将两个线性表中的元素合并成一个新的线性表。
2. 遍历新的线性表,将重复的元素删除。
3. 返回删除重复元素后的新线性表。
具体实现可以参考如下代码:
```
#include <iostream>
#include <vector>
using namespace std;
vector<int> merge_and_remove_duplicates(vector<int> list1, vector<int> list2) {
// 将两个线性表中的元素合并成一个新的线性表。
vector<int> merged_list(list1.size() + list2.size());
merge(list1.begin(), list1.end(), list2.begin(), list2.end(), merged_list.begin());
// 遍历新的线性表,将重复的元素删除。
auto last_element = unique(merged_list.begin(), merged_list.end());
// 返回删除重复元素后的新线性表。
return vector<int>(merged_list.begin(), last_element);
}
int main() {
vector<int> list1{1, 2, 3, 4};
vector<int> list2{3, 4, 5, 6};
vector<int> merged_list = merge_and_remove_duplicates(list1, list2);
for (auto element : merged_list) {
cout << element << " ";
}
// Output: 1 2 3 4 5 6
return 0;
}
```
该代码使用了 C++ STL 中的 `merge` 和 `unique` 函数。`merge` 函数可以将两个已排序的线性表合并成一个,`unique` 函数可以将重复的元素移到末尾并返回一个迭代器,用于删除这些元素。最后,我们还需要使用 vector 的构造函数将新线性表存储的部分构造成一个新的 vector 对象。
c语言删除线性表重复元素
以下是一个简单的C语言程序,用于删除线性表中的重复元素:
```
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void printList(SqList L) {
int i;
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
void deleteDup(SqList *L) {
int i, j, k;
for (i = 0; i < L->length; i++) {
for (j = i + 1; j < L->length; j++) {
if (L->data[i] == L->data[j]) {
for (k = j; k < L->length - 1; k++) {
L->data[k] = L->data[k + 1];
}
L->length--;
j--;
}
}
}
}
int main() {
SqList L = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 3, 7}, 12};
printf("Original List: ");
printList(L);
deleteDup(&L);
printf("List after deleting duplicates: ");
printList(L);
return 0;
}
```
程序定义了一个结构体`SqList`,表示线性表。其中,`data`数组存储线性表中的元素,`length`表示线性表的长度。
`deleteDup`函数用于删除线性表中的重复元素。它使用两个for循环,遍历线性表中的每个元素,并与后面的元素进行比较。如果发现重复元素,就将后面的元素向前移动,并将线性表的长度减1。
在`main`函数中,创建了一个线性表,并调用`deleteDup`函数来删除重复元素。最后,打印出删除重复元素后的线性表。