Practice #3
الدرس 12 من 14 في دورة القائمة المرتبطة - سلسلة هياكل البيانات #5 على Coddy.
التحدي
سهلبفرض وجود مصفوفة أعداد صحيحة مرتبة arr (قيم قائمة مرتبطة مرتبة)، اكتب دالة removeDuplicates تعيد المصفوفة مع إزالة التكرارات المتتالية.
بما أن المدخلات مرتبة، فإن القيم المتساوية تقع بجانب بعضها البعض. احتفظ بأول ظهور لكل قيمة وتخطى الباقي.
استخدم قائمة مرتبطة لحل هذه المشكلة!
يجب عليك استخدام فئة LinkedList (المتوفرة في linkedlist.<ext> مع node.<ext>) — لا تستخدم ميزات اللغة المدمجة مثل عكس المصفوفات المدمج، أو التقطيع (slicing)، أو عمليات القوائم في المكتبة القياسية (stdlib) لحساب النتيجة.
جرّب بنفسك
#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;
}