Practice #4
الدرس 13 من 14 في دورة القائمة المترابطة المزدوجة - سلسلة هياكل البيانات #6 على Coddy.
التحدي
سهلاكتب دالة moveToFront تستقبل مصفوفة صحيحة arr (قيم قائمة مرتبطة مزدوجاً) وعددًا صحيحًا value، وتبحث عن أول ظهور لـ value، ثم تنقل تلك العقدة إلى مقدمة القائمة. قم بإرجاع المصفوفة الناتجة.
إذا لم تكن value موجودة في القائمة، فقم بإرجاع المصفوفة دون تغيير.
استخدم قائمة مرتبطة مزدوجاً (doubly linked list) لحل هذه المشكلة!
يجب عليك استخدام فئة DoublyLinkedList (المتوفرة في doublylinkedlist.<ext> مع node.<ext>) — لا تستخدم الدوال المدمجة في اللغة مثل عكس المصفوفات (reverse)، أو التقطيع (slicing)، أو الفرز (sort)، أو عمليات القوائم في المكتبة القياسية (stdlib) لحساب النتيجة.
جرّب بنفسك
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"
int main() {
char line1[8192];
char line2[64];
if (!fgets(line1, sizeof(line1), stdin)) line1[0] = '\0';
if (!fgets(line2, sizeof(line2), stdin)) line2[0] = '\0';
int arr[4096];
int len = 0;
char* tok = strtok(line1, " \t\r\n");
while (tok) { arr[len++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
int n = atoi(line2);
int rs = 0;
int* r = moveToFront(arr, len, n, &rs);
for (int idx = 0; idx < rs; idx++) {
if (idx > 0) printf(" ");
printf("%d", r[idx]);
}
printf("\n");
return 0;
}