Derse geri dön

Tek-bağlı(single-linked) List'in çıktısının tersten yazdırılması

önem: 5

Bir önceki görevde Tek-bağlı(single-linked) List'in çıktısı yazdırılan listenin tersten çıktısını yazdırınız:

Bu işlemleri döngü ve özçağrı kullanarak yapınız.

Özçağrı kullanarak

Özçağrı çözümü burada biraz çetrefilli.

Önce listenin ggeri kalanını yazdırmak sonra ise o anki değerini yazdırmak gerekmektedir.

let list = {
  deger: 1,
  sonraki: {
    deger: 2,
    sonraki: {
      deger: 3,
      sonraki: {
        deger: 4,
        sonraki: null
      }
    }
  }
};

function geriListeYazdır(list) {

  if (list.sonraki) {
    geriListeYazdır(list.sonraki);
  }

  alert(list.deger);
}

geriListeYazdır(list);

Döngü versiyonu

Döngü versiyonu da bir öncekine göre biraz daha karmaşıktır.

list'teki son değerin alınması gibi bir yol yoktur. Ayrıca “geri doğru” gidilemez.

Bundan dolayı elemanlar sıra ile bir diziye yazılıp sonra bu dizi sondan başa okunarak bu problem çözülebilir.

let list = {
  deger: 1,
  sonraki: {
    deger: 2,
    sonraki: {
      deger: 3,
      sonraki: {
        deger: 4,
        sonraki: null
      }
    }
  }
};

function geriListeYazdır(list) {
  let dizi = [];
  let tmp = list;

  while (tmp) {
    dizi.push(tmp.deger);
    tmp = tmp.sonraki;
  }

  for (let i = dizi.length - 1; i >= 0; i--) {
    alert( dizi[i] );
  }
}

geriListeYazdır(list);

İki çözüm de aynı şekilde listeyi dolanıyor ve çalıştırma yığınındaki çağrıları hatırlayıp bunları ekrana basıyor.