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 kép, chuỗi cấu trúc dữ liệu #6 của Coddy.
Thử thách
DễViết một hàm rotateRight nhận một mảng số nguyên arr (các giá trị của danh sách liên kết đôi) và một số nguyên k, rồi trả về mảng được xoay sang phải k vị trí.
Nếu k lớn hơn độ dài của danh sách, chỉ cần tính phần dư (xoay n vị trí sẽ đưa danh sách về vị trí ban đầu). Nếu danh sách rỗng, hãy trả về một mảng rỗng.
Hãy dùng danh sách liên kết đôi để giải bài toán này!
Bạn phải dùng lớp DoublyLinkedList (được cung cấp trong doublylinkedlist.<ext> cùng với node.<ext>), không dùng các hàm có sẵn của ngôn ngữ như reverse, slicing, sort của mảng hoặc các thao tác với 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 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;
}
Tất cả bài học trong Danh sách liên kết kép, chuỗi cấu trúc dữ liệu #6
Tự luyện tập: Trình biên dịch C online