Luyện tập #2
Bài học 11 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 sumLastN 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 dương n, rồi trả về tổng của n phần tử cuối cùng.
Nếu n lớn hơn độ dài danh sách, hãy tính tổng toàn bộ danh sách. Nếu n bằng 0 hoặc nhỏ hơn 0, hãy trả về 0.
Hãy dùng danh sách liên kết đôi để giải bài toán này! Bắt đầu từ tail và đi ngược lại n bước.
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 tích hợp sẵn của ngôn ngữ như reverse, slicing, sort của 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 r = sumLastN(arr, len, n);
printf("%d\n", r);
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