Luyện tập #3
Bài học 12 trên 14 trong khóa học Danh sách liên kết, loạt bài về cấu trúc dữ liệu #5 của Coddy.
Thử thách
DễCho một mảng số nguyên đã sắp xếp arr (các giá trị của một danh sách liên kết đã sắp xếp), hãy viết một hàm removeDuplicates trả về mảng sau khi loại bỏ các giá trị trùng lặp liên tiếp.
Vì đầu vào đã được sắp xếp, các giá trị bằng nhau nằm cạnh nhau. Giữ lại lần xuất hiện đầu tiên của mỗi giá trị và bỏ qua những lần còn lại.
Hãy dùng danh sách liên kết để giải bài toán này!
Bạn phải dùng lớp LinkedList (được cung cấp trong linkedlist.<ext> cùng với node.<ext>) — không dùng các hàm dựng sẵn của ngôn ngữ như hàm đảo ngược dựng sẵn của mảng, thao tác lấy lát cắt hoặc các thao tác danh sách trong thư viện chuẩn để tính kết quả.
Tự làm thử
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"
int main() {
char line[8192];
if (!fgets(line, sizeof(line), stdin)) line[0] = '\0';
int arr[4096];
int len = 0;
char* tok = strtok(line, " \t\r\n");
while (tok) { arr[len++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
int rs = 0;
int* r = removeDuplicates(arr, len, &rs);
for (int idx = 0; idx < rs; idx++) {
if (idx > 0) printf(" ");
printf("%d", r[idx]);
}
printf("\n");
return 0;
}
Tất cả bài học trong Danh sách liên kết, loạt bài về cấu trúc dữ liệu #5
Tự luyện tập: Trình biên dịch C online