Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct ListNode {
- int value;
- ListNode* next;
- };
- ListNode* Process(ListNode* head, unsigned k) {
- // Указатели для прохода по списку
- ListNode* fast = head;
- ListNode* slow = head;
- ListNode* prev = nullptr;
- // Сдвигаем указатель fast на k шагов вперед
- for (unsigned i = 0; i < k; ++i) {
- if (fast == nullptr) return head; // Если список короче k, ничего не делаем
- fast = fast->next;
- }
- // Продвигаем fast до конца списка, одновременно двигая slow
- while (fast != nullptr) {
- fast = fast->next;
- prev = slow;
- slow = slow->next;
- }
- // Удаляем slow (k-ый элемент с конца)
- if (prev == nullptr) {
- // Если удаляемый элемент — это head
- head = head->next;
- } else {
- prev->next = slow->next;
- }
- delete slow;
- return head;
- }
- // Вспомогательная функция для создания нового узла
- ListNode* CreateNode(int value) {
- ListNode* newNode = new ListNode;
- newNode->value = value;
- newNode->next = nullptr;
- return newNode;
- }
- // Вспомогательная функция для печати списка
- void PrintList(ListNode* head) {
- while (head) {
- cout << head->value << " ";
- head = head->next;
- }
- cout << endl;
- }
- // Вспомогательная функция для удаления списка
- void DeleteList(ListNode* head) {
- while (head) {
- ListNode* temp = head;
- head = head->next;
- delete temp;
- }
- }
- int main() {
- // Создаем список
- ListNode* head = nullptr;
- ListNode* tail = nullptr;
- int n, k;
- cout << "enter list length: ";
- cin >> n;
- if (n <= 0){
- cout << "incorrect value for n!";
- return -1;
- }
- cout << "enter list elements: ";
- for (int i = 0; i < n; ++i) {
- int value;
- cin >> value;
- ListNode* newNode = CreateNode(value);
- if (head == nullptr) {
- head = newNode;
- tail = newNode;
- } else {
- tail->next = newNode;
- tail = newNode;
- }
- }
- cout << "enter k: ";
- cin >> k;
- if (k < 0 || k > n){
- cout << "incorrect value for k!";
- return -1;
- }
- head = Process(head, k);
- cout << "result list: ";
- PrintList(head);
- DeleteList(head);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement