Luyện tập #4
Bài học 13 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 (function) moveToFront nhận vào 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 value, tìm lần xuất hiện đầu tiên của value rồi chuyển nút đó lên đầu danh sách. Trả về mảng kết quả.
Nếu value không có trong danh sách, hãy trả về mảng không thay đổi.
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 trong ngôn ngữ như reverse, cắt lát, sắp xếp mảng hoặc các thao tác trên 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 = moveToFront(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