Luyện tập #1
Bài học 10 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 isPalindrome 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à trả về true nếu đọc xuôi và ngược đều giống nhau, nếu không thì trả về false.
Hãy dùng danh sách liên kết đôi để giải bài toán này! Di chuyển một con trỏ từ head tiến về phía trước và một con trỏ khác từ tail lùi về phía sau, chúng sẽ gặp nhau ở giữa.
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 tính năng 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 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 r = isPalindrome(arr, len);
printf("%s\n", r ? "true" : "false");
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