40 najlepszych pytań i odpowiedzi na pytania dotyczące listy powiązanej (2026)

Najczęściej zadawane pytania i odpowiedzi na pytania z listy powiązanych rozmów kwalifikacyjnych

Przygotowanie do rozmowy kwalifikacyjnej na stanowisko specjalisty ds. struktur danych wymaga skupienia się na wyzwaniach. Pytania do rozmowy kwalifikacyjnej z listami powiązanymi ujawniają poziom zaawansowania w rozwiązywaniu problemów, logikę wskaźników, świadomość pamięci oraz to, jak kandydaci rozumują w kontekście przypadków skrajnych.

Opanowanie list powiązanych otwiera nowe możliwości w zespołach produktowych, na platformach i w inżynierii systemów. Praktyczne doświadczenie rozwija solidne kompetencje techniczne, myślenie analityczne i nawyki czystego kodowania. Zarówno początkujący, jak i doświadczeni specjaliści, mają dostęp do praktycznych umiejętności debugowania, analizy wydajności, mentoringu młodszych pracowników i współpracy z menedżerami nad skalowalnymi rozwiązaniami z wykorzystaniem zaawansowanych koncepcji zdobytych w trakcie doświadczenia.
Czytaj więcej ...

👉 Bezpłatne pobieranie pliku PDF: Pytania i odpowiedzi z listy powiązanych pytań do wywiadu

Najczęściej zadawane pytania i odpowiedzi na pytania z listy powiązanych rozmów kwalifikacyjnych

1) Wyjaśnij, czym jest lista powiązana i czym różni się od tablicy.

A połączona lista to liniowa struktura danych, w której elementy, zwane węzłami, są połączone za pomocą wskaźników lub referencji. Każdy węzeł zawiera dane oraz wskaźnik/referencję do następnego węzła na liście. W przeciwieństwie do tablic, listy powiązane nie przechowują elementów w ciągłej pamięci.

Kluczowe różnice między listą powiązaną a tablicą:

Cecha Połączona lista Szyk
Przydział pamięci Dynamiczny Statyczny
Czas dostępu do elementu Na) O (1)
Wstawianie/usuwanie Efektywny (na każdej pozycji) Kosztowne (wymaga przeniesienia)
Nadwyżka pamięci Dodatkowa przestrzeń na wskaźniki Brak dodatkowego wskaźnika na górze

Podsumowując, listy powiązane wymagają szybszego wstawiania i dynamicznego określania rozmiaru, a kosztem wolniejszego dostępu losowego i dodatkowego obciążenia pamięci wynikającego ze wskaźników.


2) Jakie są różne typy list powiązanych?

Tam są kilka typów list powiązanych, a osoby przeprowadzające rozmowy kwalifikacyjne często proszą o ich rozróżnienie:

  • Lista jednokierunkowo powiązana: Każdy węzeł wskazuje tylko na następny węzeł.
  • Lista podwójnie połączona: Węzły mają dwa wskaźniki: jeden do następnego i jeden do poprzedniego węzła.
  • Lista powiązana kołowa: Ostatni węzeł wskazuje na pierwszy węzeł, tworząc pętlę.
  • Lista powiązana podwójnie kołowa: Łączy zarówno listy cykliczne, jak i listy dwukierunkowo powiązane.

Każdy typ ma inne zastosowania, zależne od przechodzenia i potrzeb pamięciowych. Na przykład listy dwukierunkowo łączone umożliwiają łatwe przechodzenie wstecz kosztem dodatkowych wskaźników.


3) Jak odwrócić listę jednokierunkową? (Podejście kodowania)

RevPrzetwarzanie listy powiązanej to klasyczne pytanie na rozmowie kwalifikacyjnej. Celem jest zmiana kierunku wskaźników, tak aby lista została odwrócona w miejscu, bez przydzielania nowych węzłów.

Kluczowy pomysł:
Użyj trzech wskazówek — prev, curr, next — i przejrzyj listę. Na każdym kroku przekieruj curr.next do prev, a następnie przesuń wszystkie wskaźniki.

ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode next = curr.next;
        curr.next = prev;
        prev = curr;
        curr = next;
    }
    return prev; // New head
}

Przekształca powiązaną strukturę bez dodatkowej przestrzeni i działa w Na) czas.


4) Wyjaśnij technikę dwóch wskaźników służącą do znajdowania środka listy powiązanej.

Najbardziej efektywnym sposobem znalezienia środkowego węzła listy powiązanej jest użycie dwóch wskaźników:

  • A powolny wskaźnik przesuwa jeden węzeł na raz.
  • A szybki wskaźnik przesuwa dwa węzły na raz.

Gdy szybki wskaźnik dotrze do końca, wolny wskaźnik znajdzie się w punkcie środkowym. Ta technika działa w Na) czas bez dodatkowej przestrzeni.


5) Jak wykryć cykl na liście powiązanej?

Wykrywanie cykli to kolejny klasyczny problem. Standardowe rozwiązanie wykorzystuje Algorytm Żółwia i Zająca Floyda:

  • Przenieść slow pointer krok po kroku.
  • Przenieść fast pointer dwa kroki na raz.
  • Jeżeli lista ma cykl, oba wskaźniki się spotkają.

Jeśli szybki wskaźnik osiągnie null, lista nie ma cyklu. Ta metoda działa w Na) czas i O (1) miejsca.


6) Jakie są zalety i wady list powiązanych?

Listy powiązane oferują szereg korzyści, ale i kompromisów:

Zalety Niedogodności
Rozmiar dynamiczny Brak losowego dostępu
Łatwe wstawianie/usuwanie Dodatkowa pamięć dla wskaźników
Wydajne dla rosnących danych Słaba wydajność pamięci podręcznej

Listy powiązane dobrze sprawdzają się w przypadku danych dynamicznych, ale mogą być wolniejsze od tablic pod względem dostępu do elementów, ponieważ każdy dostęp wymaga przejścia od nagłówka.


7) Jak połączyć dwie posortowane listy powiązane?

Scalanie dwóch posortowanych list to kolejny częsty problem na rozmowach kwalifikacyjnych. Chodzi o to, aby przejść przez obie listy jednocześnie i zbudować nową posortowaną listę, wybierając mniejszy węzeł z każdej z nich na każdym kroku.

ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    ListNode dummy = new ListNode(0);
    ListNode tail = dummy;
    while (l1 != null && l2 != null) {
        if (l1.val < l2.val) {
            tail.next = l1;
            l1 = l1.next;
        } else {
            tail.next = l2;
            l2 = l2.next;
        }
        tail = tail.next;
    }
    tail.next = (l1 != null) ? l1 : l2;
    return dummy.next;
}

Ta metoda zachowuje posortowaną kolejność i działa w O(n + m) czas na listy długości n i m.


8) Wyjaśnij, jak usunąć N-ty węzeł z końca listy powiązanej.

Najbardziej efektywna technika wykorzystuje dwa wskaźniki oddzielonych n węzłami. Przesuń pierwszy wskaźnik o n kroków, a następnie przesuń oba wskaźniki, aż pierwszy dotrze do końca. Drugi wskaźnik znajdzie się wtedy tuż przed węzłem docelowym.

Dzięki temu unikniesz oddzielnego obliczania długości listy i zakończysz ją w Na) czas. Obsługuje również przypadki brzegowe, takie jak usunięcie pierwszego węzła.


9) Jaka jest złożoność czasowa dostępu do k-tego elementu listy powiązanej?

Dostęp do kelement listy powiązanej wymaga przejścia od nagłówka do kwęzeł. Ponieważ listy powiązane nie zapewniają bezpośredniego indeksowania, kosztuje to Na) w najgorszym przypadku czas.

W przeciwieństwie do tego tablice obsługują bezpośrednie indeksowanie w O (1) czas.


10) Dlaczego warto używać listy powiązanej zamiast tablicy?

Listy powiązane są szczególnie przydatne, gdy:

  • Można się spodziewać częstych wstawek i usunięć w dowolnych miejscach.
  • Nie znasz z góry rozmiaru swoich danych.
  • Fragmentacja pamięci utrudnia ciągły przydział pamięci.

Obsługują one efektywne dynamiczne przydzielanie pamięci i stałe wstawianie/usuwanie elementów na końcach listy lub przy znanym odwołaniu do węzła — są to zalety, których tablice nie są w stanie zapewnić.


11) Jakie są praktyczne zastosowania list powiązanych?

Listy powiązane są powszechnie stosowane w systemach, w których dynamiczna alokacja pamięci, częste wstawkilub struktury danych o zmiennej wielkości Są wymagane. Są one implementowane w kilku podstawowych koncepcjach i aplikacjach informatycznych, takich jak:

  • Dynamiczne zarządzanie pamięcią (używany w systemach operacyjnych)
  • Funkcje cofania/ponawiania w edytorach tekstu
  • Łańcuchowanie tablic mieszających rozwiązywać kolizje
  • Nawigacja po listach odtwarzania muzyki lub wideo
  • Reprezentacja sąsiedztwa grafu
  • Operacje arytmetyczne wielomianów

Przykłady te pokazują, jak listy powiązane zapewniają elastyczność i skuteczną manipulację sekwencjami w sytuacjach, w których zmiana rozmiaru tablicy byłaby kosztowna.


12) Wyjaśnij różnicę między listą pojedynczo i dwukierunkowo powiązaną.

Cecha Lista pojedynczo połączona Lista podwójnie połączona
wskaźniki 1 (tylko następny węzeł) 2 (poprzedni i następny)
Przemierzanie Tylko w jednym kierunku Oba kierunki
Użycie pamięci Less (tylko jeden wskaźnik) Więcej (dodatkowy wskaźnik)
usunięcie Trudniejsze (potrzebny poprzedni węzeł) Łatwiejszy
Przykładowe zastosowanie Implementacja stosu Nawigacja po historii przeglądarki

A lista dwukierunkowo powiązana jest bardziej wszechstronny, ale zużywa więcej pamięci. W przeciwieństwie do tego, listy pojedynczo połączone są lekkie i wydajne przy jednokierunkowym przemieszczaniu się.


13) Jak usunąć duplikaty z posortowanej listy powiązanej?

Jeśli lista powiązana jest już posortowana, duplikaty będą sąsiadować ze sobą.

Przejrzyj listę i porównaj dane każdego węzła z danymi kolejnego węzła. Jeśli są takie same, pomiń kolejny węzeł.

void removeDuplicates(ListNode head) {
    ListNode current = head;
    while (current != null && current.next != null) {
        if (current.val == current.next.val) {
            current.next = current.next.next;
        } else {
            current = current.next;
        }
    }
}

Złożoność: Czas O(n) i przestrzeń O(1).

W przypadku list nieposortowanych do śledzenia wyświetlanych wartości można użyć obiektu HashSet.


14) Jaka jest różnica pomiędzy listą liniową i kołową?

Cecha Lista liniowa powiązana Lista połączona okólnie
Ostatni węzeł Wskazuje na NULL Wskazuje na węzeł główny
Przemierzanie Kończy się, kiedy next == NULL Ciągłe przechodzenie
Przypadek użycia Stos, kolejka Harmonogramowanie typu round-robin
Złożoność Prostsze Bardziej złożona obsługa

Listy cykliczne są szczególnie przydatne w aplikacjach, takich jak planowanie użycia procesora, w których procesy są wykonywane cyklicznie.


15) Jak znaleźć punkt przecięcia dwóch list powiązanych?

Aby ustalić, czy dwie listy jednokierunkowo powiązane się przecinają:

  1. Znajdź długości obu list.
  2. Przesuń wskaźnik dłuższej listy o różnicę długości.
  3. Przeglądaj obie listy jednocześnie, aż węzły będą identyczne.

Alternatywnie, a Zestaw skrótów można użyć do przechowywania odwiedzonych węzłów dla przestrzeni O(n).

To podejście jest skuteczne i często zadawane pytanie podczas rozmów kwalifikacyjnych na stanowiskach kierowniczych.


16) Jak sprawdzić, czy dwie listy powiązane są identyczne?

Dwie listy powiązane są identyczne, jeżeli:

  • Mają taką samą liczbę węzłów.
  • Wartości odpowiednich węzłów są identyczne w kolejności.

Algorytm:

  1. Przeglądaj obie listy jednocześnie.
  2. Porównaj dane każdego węzła.
  3. Jeżeli wszystkie pary są takie same i obie osiągną wartość NULL, są identyczne.

Złożoność czasowa: Na)

Złożoność kosmiczna: O (1)


17) Czym jest wyciek pamięci w kontekście list powiązanych?

A wyciek pamięci występuje, gdy dynamicznie przydzielone węzły nie są zwalniane po użyciu.

W listach powiązanych, jeśli delete or free() nie jest wywoływana na węzłach usuniętych z listy, pamięć pozostaje zajęta, nawet jeśli nie jest już dostępna.

Na przykład nie udało się zwolnić usuniętych węzłów w C/C++ prowadzi do stopniowego wyczerpywania się pamięci, powodując spowolnienie działania systemu lub jego awarię.

Poprawne czyszczenie za pomocą destruktora lub jawnego dealokowania pozwala uniknąć tego problemu.


18) Wyjaśnij, jak zaimplementować stos przy użyciu listy powiązanej.

W stos, elementy są uporządkowane według zasady LIFO (ostatnie weszło, pierwsze wyszło).

Lista powiązana jest idealnym rozwiązaniem, ponieważ operacje dodawania i usuwania elementów są efektywnie wykonywane od początku.

Operacje:

  • Pchać: Wstaw nowy węzeł na początku.
  • Muzyka pop: Usuń węzeł z głowy.
  • Zerkać: Zwróć dane nagłówka.

Zalety:
Nie ma potrzeby stosowania tablicy o stałym rozmiarze; tablica rośnie dynamicznie w miarę dodawania nowych elementów.


19) W jaki sposób można wykorzystać listę powiązaną do implementacji kolejki?

W kolejkaelementy są układane zgodnie z kolejnością FIFO (pierwsze weszło, pierwsze wyszło).

Użyj listy powiązanej, gdy:

  • Kolejka (wstaw): Dodaj węzeł na ogonie.
  • Dequeue (Usuń): Usuń węzeł z nagłówka.

Umożliwia to obie operacje w O (1) czas z dwoma wskaźnikami — front oraz rear.

Jest powszechnie stosowany w systemach planowania procesów i kolejek drukowania.


20) Jakie są różnice między listą tablicową a listą powiązaną w Java?

WYGLĄD ArrayList Połączona lista
Magazynowanie Tablica dynamiczna Lista dwukierunkowo powiązana
Czas dostępu O (1) Na)
Wstaw/Usuń Kosztowny w środku Wydajny na końcach
Nadwyżka pamięci Less Więcej (dodatkowe wskazówki)
Przypadek użycia Częsty dostęp Częste wstawianie/usuwanie

Przykład: Zastosowanie ArrayList do operacji wymagających intensywnego wyszukiwania oraz LinkedList gdy dominują operacje wstawiania/usuwania.


21) Jak spłaszczyć listę wielopoziomową?

A lista powiązana wielopoziomowa może zawierać węzły, które mają oba next oraz child wskaźniki (każdy element potomny prowadzi do innej listy powiązanej). Celem jest spłaszczenie wszystkich węzłów do listy powiązanej jednopoziomowej.

Podejście:

  1. Użyj stos or funkcja rekurencyjna.
  2. Zacznij od węzła głównego.
  3. Jeśli węzeł ma child, pchnij go next węzeł do stosu i wykonaj child as next.
  4. Kontynuuj, aż stos będzie pusty.

Złożoność czasowa: Na)

Złożoność przestrzeni: O(n) dla rekurencji/stosu.

Przykład (koncepcyjnie):

1 - 2 - 3
    |
    4 - 5
Flattened → 1 → 2 → 4 → 5 → 3

To pytanie ma na celu sprawdzenie Twojej wiedzy na temat rekurencji i manipulacji wskaźnikami.


22) Jak sklonować listę powiązaną z losowymi wskaźnikami?

Każdy węzeł na tej specjalnej liście powiązanej ma dwa wskaźniki:

  • next → wskazuje na następny węzeł.
  • random → wskazuje na dowolny węzeł.

Algorytm (3 kroki):

  1. Wstaw sklonowane węzły pomiędzy węzły oryginalne.
  2. Przypisz losowe wskaźniki do klonów (clone.random = original.random.next).
  3. Rozdziel obie listy.

Dzięki temu unikniesz dodatkowej przestrzeni na mapę skrótów i uruchomisz ją w Na) czas z O (1) dodatkowa przestrzeń.

Przypadek użycia: Głębokie kopiowanie złożonych struktur danych (np. grafów lub odniesień do obiektów).


23) Czym jest lista pomijana i jaki jest jej związek z listami powiązanymi?

A lista pomijania jest warstwową strukturą listy powiązanej umożliwiającą szybkie wyszukiwanie, wstawianie i usuwanie (podobnie do zrównoważonych drzew).

Operacja Średni czas Najgorszy przypadek
Szukaj O (log n) Na)
Wstaw/Usuń O (log n) Na)

Zawiera wiele poziomów, przy czym wyższe poziomy „pomijają” kilka węzłów, co poprawia efektywność wyszukiwania.

Przykład: Używany w bazach danych, takich jak Redis, oraz we współbieżnych implementacjach map.


24) Jak wykryć palindrom na liście powiązanej?

Lista powiązana jest palindromem, jeżeli czytana od początku do końca brzmi tak samo.

Algorytm:

  1. Znajdź środek listy.
  2. Revw drugiej połowie.
  3. Porównaj dwie połówki węzeł po węźle.

Jeżeli wszystkie odpowiadające sobie węzły są takie same, jest to palindrom.

Przykład:

1 → 2 → 3 → 2 → 1 → ✅ Palindrom

1 → 2 → 3 → 4 → ❌ Nie jest palindromem

Złożoność czasowa: Na)

Złożoność przestrzeni: O (1)


25) Jak usunąć pętlę z listy powiązanej?

Jeśli istnieje pętla (wykorzystująca wykrywanie cykli Floyda), usuń ją, wykonując następujące kroki:

  1. Wykrywanie punktów styku wolnych i szybkich wskaźników.
  2. Przesuń jeden wskaźnik w stronę głowy.
  3. Przesuwaj oba wskaźniki krok po kroku, aż spotkają się w punkcie węzeł początkowy pętli.
  4. Ustaw poprzedni węzeł next do null.

Takie podejście gwarantuje, że podczas rozwiązywania cykli nie zostanie zużyta dodatkowa pamięć.


26) Jakie są różne sposoby reprezentacji list powiązanych w pamięci?

Listy powiązane można przedstawić w trzy główne sposoby:

Typ reprezentacji OPIS Przykładowe zastosowanie
Węzły dynamiczne Każdy węzeł jest dynamicznie przydzielany i łączony C, C++
Statyczna reprezentacja tablicy Używa indeksów tablicowych zamiast wskaźników Systemy wbudowane
Połączone obiekty Reprezentacja obiektowa z klasami Java, Python

Każde podejście sprawdza się w innym środowisku — na przykład listy oparte na tablicach są używane, gdy manipulowanie wskaźnikami jest ograniczone.


27) Jak można znaleźć długość listy powiązanej (iteracyjnej i rekurencyjnej)?

Podejście iteracyjne:

int getLength(ListNode head) {
    int count = 0;
    while (head != null) {
        count++;
        head = head.next;
    }
    return count;
}

Podejście rekurencyjne:

int getLength(ListNode head) {
    if (head == null) return 0;
    return 1 + getLength(head.next);
}

Oba podejścia mają Na) złożoność czasowa; rekurencja dodaje Na) narzut przestrzeni wynikający ze stosu wywołań.


28) Wyjaśnij koncepcję cyklicznych list dwukierunkowo powiązanych, podając przykład.

W cykliczna lista dwukierunkowo powiązanakażdy węzeł ma dwa łącza — jedno do następnego i jedno do poprzedniego — a ostatni węzeł next wskazuje na głowę, podczas gdy głowa prev wskazuje na ostatni węzeł.

Przykładowe przypadki użycia:

  • Systemy operacyjne czasu rzeczywistego (harmonogramowanie typu round-robin)
  • Pętla playlisty muzycznej
  • Nawigacja między kartami lub slajdami

Zalety:

  • Przemieszczanie dwukierunkowe.
  • Brak odwołań pustych.
  • Efektywne wstawianie i usuwanie.

29) Jak usunąć alternatywne węzły na liście powiązanej?

Algorytm:

  1. Zacznij od głowy.
  2. Usuń co drugi węzeł poprzez dostosowanie wskaźników.
  3. Kontynuuj, aż lista się skończy.

Przykład:

Input: 1 → 2 → 3 → 4 → 5  
Output: 1 → 3 → 5

Złożoność:

  • Czas: O(n)
  • Przestrzeń: O(1)

Sprawdzane jest zrozumienie zasad bezpiecznego przechodzenia wskaźnika i usuwania.


30) Jak znaleźć n-ty węzeł na początku i na końcu listy powiązanej?

Od początku: Przeglądaj listę, aż liczba = n.

Od końca: Użyj dwóch wskaźników.

  1. Przesuń pierwszy wskaźnik o n kroków do przodu.
  2. Przesuwaj obydwa jednocześnie, aż pierwszy osiągnie zero.
  3. Drugi wskaźnik wskazuje teraz na n-ty węzeł od końca.

Złożoność czasowa: Na)

Złożoność przestrzeni: O (1)

Dzięki takiemu podejściu nie trzeba obliczać długości osobno, co zwiększa wydajność.


31) Jak zmienić kolejność listy powiązanej?

Problem: Mając listę L0 → L1 → … → Ln-1 → Ln, zmień kolejność na L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

Kroki:

  1. Znajdź środek listy.
  2. Revw drugiej połowie.
  3. Łącz obie połówki naprzemiennie.

Przykład:

Input: 1 → 2 → 3 → 4 → 5  
Output: 1 → 5 → 2 → 4 → 3

Złożoność: Czas O(n), przestrzeń O(1).

To pytanie sprawdza, czy w ramach jednego pytania można wykonać wiele operacji na listach powiązanych.


32) Jak podzielić listę powiązaną wokół danej wartości x?

Cel:
Przeorganizuj węzły tak, aby wszystkie węzły mniejsze od x znajdowały się przed węzłami większymi lub równymi x.

Podejście:

  • Prowadź dwie listy tymczasowe: before oraz after.
  • Przejrzyj oryginalną listę i dołącz węzły do ​​odpowiednich list.
  • Połącz je na końcu.

Przykład:

Input: 3 → 5 → 8 → 5 → 10 → 2 → 1, x = 5  
Output: 3 → 2 → 1 → 5 → 8 → 5 → 10

Często zadawane pytanie ma na celu ocenę możliwości reorganizacji danych.


33) Jak sortować listę powiązaną?

Ponieważ listy powiązane nie obsługują dostępu losowego, Sortuj przez scalanie jest najlepszym wyborem.

Kroki:

  1. Podziel listę na połowy, używając wskaźników wolnych/szybkich.
  2. Rekurencyjnie posortuj każdą połowę.
  3. Połącz posortowane połówki.

Zalety:

  • Czas O(n log n).
  • O(1) dodatkowej przestrzeni (dla wersji iteracyjnej).

W przeciwieństwie do tablic, QuickSort jest nieefektywny w przypadku list powiązanych ze względu na złożoność przegrupowania wskaźników.


34) Jaka jest różnica pomiędzy listami powiązanymi pojedynczo, podwójnie i cyklicznie?

Cecha Pojedynczo Podwójnie Okólnik
Linki Jeden (następny) Dwa (poprzednie i następne) Ostatni węzeł łączy się z głową
Przemierzanie Tylko do przodu Do przodu i do tyłu Możliwość nieograniczonego przemierzania
Wstawianie/usuwanie Umiarkowany Łatwiej z obu stron Obsługa przypadków specjalnych
Przypadek użycia Stos, kolejka Cofnij operacje Harmonogramowanie typu round-robin

To pytanie porównawcze często pojawia się w celu sprawdzenia jasności koncepcji.


35) Jak znaleźć węzeł przecięcia dwóch list powiązanych cyklicznie?

Jest to rozwinięcie problemu skrzyżowania.

Algorytm:

  1. Wykryj, czy każda lista ma pętlę.
  2. Jeżeli oba są acykliczne → zastosuj standardowy algorytm przecięcia.
  3. Jeżeli oba są cykliczne → znajdź początek pętli dla każdego z nich i sprawdź, czy są takie same i połączone.

Ten problem łączy wykrywanie cykli oraz logika skrzyżowania, testowanie rozumowania wielopojęciowego.


36) Wyjaśnij, jak wstawić węzeł do posortowanej listy powiązanej.

Kroki:

  1. Utwórz nowy węzeł z podaną wartością.
  2. Kontynuuj, aż znajdziesz właściwą pozycję.
  3. Dostosować next odpowiednio wskazówki.

Przykład:

Input: 1 → 3 → 5 → 7, Insert 4  
Output: 1 → 3 → 4 → 5 → 7

To podstawowy problem manipulacyjny mający na celu sprawdzenie zrozumienia regulacji wskaźnika.


37) Jak podzielić listę powiązaną na dwie połowy?

Algorytm:

  • Użyj metody wolnego i szybkiego wskaźnika.
  • Kiedy fast dociera do końca, slow będzie w połowie.
  • Podziel w tym węźle.

Przykład:

Input: 1 → 2 → 3 → 4 → 5  
Output: 1 → 2 → 3  and  4 → 5

Operacja ta jest często pierwszym krokiem sortowania przez scalanie list powiązanych.


38) Jak znaleźć ostatnie wystąpienie wartości na liście powiązanej?

Przeglądaj listę, zwracając uwagę na ostatni węzeł, w którym znaleziono wartość docelową.

Pseudokod:

ListNode findLastOccurrence(ListNode head, int val) {
    ListNode result = null;
    while (head != null) {
        if (head.val == val) result = head;
        head = head.next;
    }
    return result;
}

Złożoność: Na)

Sprawdzane jest zrozumienie przechodzenia liniowego i sprawdzanie warunków.


39) Jak można usunąć wszystkie wystąpienia danego klucza z listy powiązanej?

Algorytm:

  1. Jeśli węzły główne zawierają klucz docelowy, zajmij się nimi w pierwszej kolejności.
  2. Następnie przejrzyj i usuń kolejne węzły zawierające klucz.

Przykład:

Input: 1 → 2 → 6 → 3 → 4 → 5 → 6, Key = 6  
Output: 1 → 2 → 3 → 4 → 5

Złożoność: Na)

To pokazuje wiedzę na temat przypadków brzegowych (szczególnie usuwania nagłówków).


40) Jakie są najważniejsze różnice między strukturami danych opartymi na stosie i liście powiązanej?

Cecha Stos Połączona lista
Typ dostępu LIFO (ostatnie weszło, pierwsze wyszło) Sekwencyjna
Wdrożenie Tablica lub lista powiązana Oparty na węzłach
Specjaliści ds. operacyjnych Pchnij/Wypchnij Wstaw/Usuń/Przejdź
Elastyczność Ograniczony dostęp Elastyczny dostęp
Przypadek użycia Zarządzanie wywołaniami funkcji Dynamiczna obsługa danych

Można zaimplementować stos korzystanie z listy powiązanejale różnią się koncepcją — stos ma ograniczony dostęp, podczas gdy lista powiązana jest strukturą ogólnego przeznaczenia.


🔍 Lista najczęściej zadawanych pytań na rozmowach kwalifikacyjnych z uwzględnieniem rzeczywistych scenariuszy i strategicznych odpowiedzi

1) Czym jest lista powiązana i czym różni się od tablicy?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce ocenić Twoją wiedzę na temat podstawowych struktur danych i umiejętność porównywania kompromisów.

Przykładowa odpowiedź: Lista powiązana to liniowa struktura danych, w której elementy, zwane węzłami, są połączone za pomocą wskaźników. Każdy węzeł zawiera dane i referencję do następnego węzła. W przeciwieństwie do tablic, listy powiązane nie wymagają ciągłej pamięci i umożliwiają dynamiczną zmianę rozmiaru, ale charakteryzują się wolniejszym czasem dostępu, ponieważ elementy nie są indeksowane.


2) Kiedy w rzeczywistym zastosowaniu wybrałbyś listę powiązaną zamiast tablicy?

Oczekuje się od kandydata: Oceniają Twoją praktyczną wiedzę w zakresie wyboru odpowiednich struktur danych.

Przykładowa odpowiedź: Wybrałbym listę powiązaną, gdy wymagane jest częste wstawianie i usuwanie danych, zwłaszcza w środku zbioru danych. Na poprzednim stanowisku pracowałem nad funkcją planowania zadań, w której zadania były często dodawane i usuwane, a lista powiązana zapewniała lepszą wydajność niż tablica.


3) Czy możesz wyjaśnić różnicę między listami jednokierunkowo powiązanymi i dwukierunkowo powiązanymi?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce sprawdzić Twoją jasność pojęć i umiejętność jasnego wyjaśniania różnic technicznych.

Przykładowa odpowiedź: Lista jednokierunkowa ma węzły wskazujące tylko na następny węzeł, natomiast lista dwukierunkowa ma węzły wskazujące zarówno na następny, jak i poprzedni węzeł. Listy dwukierunkowe umożliwiają łatwiejsze przeglądanie wstecz, ale wymagają więcej pamięci ze względu na dodatkowy wskaźnik.


4) Jak wykryć cykl na liście powiązanej?

Oczekuje się od kandydata: Test sprawdzający umiejętność rozwiązywania problemów i znajomość typowych wzorców algorytmicznych.

Przykładowa odpowiedź: Powszechnym podejściem jest użycie dwóch wskaźników poruszających się z różnymi prędkościami, często nazywanych techniką „wolnego i szybkiego wskaźnika”. Jeśli istnieje cykl, oba wskaźniki w końcu się spotkają. W poprzednim przykładzie zastosowałem to podejście, aby zapobiec powstawaniu nieskończonych pętli w potoku przetwarzania danych.


5) Jakie operacje są najczęściej wykonywane na listach powiązanych?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną chce sprawdzić, czy rozumiesz standardowe operacje i ich konsekwencje.

Przykładowa odpowiedź: Do typowych operacji należą wstawianie, usuwanie, przechodzenie, wyszukiwanie i odwracanie listy. Każda operacja ma różną złożoność czasową w zależności od miejsca wykonania, co jest istotne przy projektowaniu wydajnych systemów.


6) Jak sobie radzisz z wstawianiem węzła w środek listy powiązanej?

Oczekuje się od kandydata: Sprawdzają Twoją wiedzę na temat manipulacji wskaźnikami i uwagę na szczegóły.

Przykładowa odpowiedź: Aby wstawić węzeł w środek, najpierw przeszukuję listę w poszukiwaniu pozycji docelowej, a następnie dostosowuję wskaźniki tak, aby nowy węzeł wskazywał na następny węzeł, a poprzedni na nowy. Ostrożne aktualizacje wskaźników są kluczowe, aby uniknąć uszkodzenia listy.


7) Opisz sytuację, w której lista powiązana spowodowała problemy z wydajnością i jak sobie z nimi poradziłeś.

Oczekuje się od kandydata: To pytanie behawioralne ma na celu ocenę Twojej zdolności do refleksji i optymalizacji.

Przykładowa odpowiedź: W mojej poprzedniej pracy do częstych operacji wyszukiwania używano listy powiązanej, co prowadziło do spowolnienia działania. Zidentyfikowałem problem i zaleciłem przejście na strukturę opartą na skrótach, co znacznie skróciło czas wyszukiwania.


8) Jak odwrócić listę powiązaną?

Oczekuje się od kandydata: Osoba przeprowadzająca rozmowę kwalifikacyjną sprawdza Twoje logiczne myślenie i zrozumienie podejść iteracyjnych i rekurencyjnych.

Przykładowa odpowiedź: Odwróciłbym listę powiązaną, iterując ją i zmieniając kolejny wskaźnik każdego węzła tak, aby wskazywał na poprzedni węzeł. Ten proces jest kontynuowany, aż wszystkie wskaźniki zostaną odwrócone, a nagłówek zaktualizowany.


9) Jakie są zalety i wady stosowania list powiązanych?

Oczekuje się od kandydata: Chcą zrównoważonej perspektywy i świadomości kompromisów.

Przykładowa odpowiedź: Do zalet należą dynamiczny rozmiar oraz wydajne wstawianie i usuwanie elementów. Do wad należą większe zużycie pamięci i wolniejszy czas dostępu w porównaniu z tablicami. W mojej poprzedniej roli zrozumienie tych kompromisów pomogło mi w wyborze odpowiedniej struktury dla różnych komponentów.


10) Jak zdecydować, jaki typ listy powiązanej zastosować w projekcie systemu?

Oczekuje się od kandydata: To pytanie sytuacyjne ma na celu ocenę podejmowania decyzji w kontekście architektonicznym.

Przykładowa odpowiedź: Biorę pod uwagę takie czynniki, jak potrzeby przechodzenia, ograniczenia pamięci i częstotliwość operacji. Na przykład, jeśli wymagane jest przechodzenie wstecz, bardziej odpowiednia jest lista dwukierunkowa, natomiast lista jednokierunkowa jest wystarczająca dla prostszych, oszczędzających pamięć implementacji.

Podsumuj ten post następująco: