Skip to content

Latest commit

 

History

History
55 lines (41 loc) · 3.11 KB

File metadata and controls

55 lines (41 loc) · 3.11 KB

Седмица 2 - Линеен двусвързан списък (обръщане, изтриване на елементи)

Основни операции с двусвързан списък

Решения на задачите

Чрез директно използване на възлите на двусвързан списък да се решат следните задачи:

Задача 1:

Дефинирайте функцията void deleteAverage(Node* &first), която трие даден елемент от списъка, ако той е равен на средноаритметичното на първите два елемента, намиращи се от дясната му страна.

Пример:
Входен списък:
first: 5 <=> 3 <=> 7 <=> 3.5 -> 2 <=> 5 <=> 4.5 <=> 3 <=> 6 <=> 8 <=> 4
Резултат:
deleteAverage(first): 3 <=> 7 <=> 2 <=> 5 <=> 3 <=> 8 <=> 4

Задача 2:

Дефинирайте функцията void deleteSum(Node* &first), която намира разликата на най-големия и най-малкия елемент в списъка и ако в него съществува възел с такава стойност, изтрива всички негови срещания. В противен случай извежда съобщение, че не е намерен такъв елемент.

Пример:
Входен списък:
first: 3 <=> 5 <=> 2 <=> 1 <=> 4 <=> 6 <=> 5 <=> 5 <=> 1
Резултат:
deleteSum(first): 3 <=> 2 <=> 1 <=> 4 <=> 6 <=> 1

Задача 3:

Дефинирайте функцията void reverseFirstK(Node* &first, int k), която обръща първите K елемента на подадения списък.

Пример:
Входен списък:
first: 1 <=> 2 <=> 3 <=> 4 <=> 5 <=> 6 <=> 7 <=> 8
Резултат:
reverseFirstK(first, 4): 4 <=> 3 <=> 2 <=> 1 <=> 5 <=> 6 <=> 7 <=> 8 

Задача 4:

Дефинирайте функцията Node* mergeLists(Node* &evens, Node* &odds), която получава два списъка, първият от които се състои само от четни числа, а вторият – от нечетни, проверява дали всеки от тях се състои от посочения вид елементи - при наличие на успех слива последователно елементите на подадените списъци в нов списък, редувайки четни с нечетни числа и го връща в обърнат ред. В противен случай извежда съобщение, че списъците не са коректни.

Пример:
Входни списъци:
evens: 8 <=> 2 <=> 6 <=> 4
odds: 5 <=> 9 <=> 7 <=> 3 
Резултат:
mergeLists(evens, odds): 3 <=> 4 <=> 7 <=> 6 <=> 9 <=> 2 <=> 5 <=> 8