Practice #3
الدرس 12 من 14 في دورة القائمة المترابطة المزدوجة - سلسلة هياكل البيانات #6 على Coddy.
التحدي
سهلاكتب دالة rotateRight تستقبل مصفوفة أعداد صحيحة arr (قيم قائمة مرتبطة بشكل مزدوج) وعددًا صحيحًا k، وتعيد المصفوفة مزاحة لليمين بمقدار k من المواضع.
إذا كانت k أكبر من طول المصفوفة، فإن الباقي فقط هو ما يهم (الإزاحة بمقدار n تعيدك إلى حيث بدأت). إذا كانت القائمة فارغة، فقم بإعادة مصفوفة فارغة.
استخدم قائمة مرتبطة بشكل مزدوج (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 = rotateRight(arr, len, n, &rs);
for (int idx = 0; idx < rs; idx++) {
if (idx > 0) printf(" ");
printf("%d", r[idx]);
}
printf("\n");
return 0;
}