Rumah  >  Soal Jawab  >  teks badan

Soalan temu bual tentang javascript

Saya lupa apa yang saya tanya ketika itu, kerana saya banyak bercakap dan ingatan saya tidak baik
Mungkin "Bagaimana untuk menilai sama ada rantai mempunyai cincin"
Saya hanya ingat maksudnya...
Terima kasih. kerana membantu saya membetulkan masalah. Perkara utama saya ialah saya ingin tahu apakah soalan itu.

仅有的幸福仅有的幸福2663 hari yang lalu743

membalas semua(2)saya akan balas

  • 滿天的星座

    滿天的星座2017-07-05 10:56:36

    Ini soalan yang agak sukar

    var a = {
        val: 'a'
    }, b = {
        val: 'b'
    }, c = {
        val: 'c'
    }; 
    
    a.next = b;
    b.next = c; 
    c.next = a;
    

    a.nextb
    b.nextc
    c.nexta
    .....

    Jika anda melaksanakan gelung berikut

    var temp = a; 
    while(tamp){
        temp = temp.next; 
    }

    Kemudian ia akan menjadi gelung tak terhingga, dan suhu akan ditetapkan seperti berikut: a => b => c => a => b ..... 这样的 abc Ia membentuk gelung


    Anda boleh merujuk kepada baris gilir bulat dan senarai pautan cincin.

    Jadi bagaimana untuk menilai?

    Memandangkan dia kata nak saya judge, ikut step di atas.

    Rekursi

    function isCircle(list, head){
        // 默认值 
        head = head || list; 
        if (list.next === head){ // 相等 
            console.log('是循环的'); 
            return true; 
        } else if (!list.next) { // 下一个? 不存在的 
            console.log('不是循环的');
            return false; 
        } else {
            // 继续递归 
            return isCircle(list.next, head); 
        }
    }

    ScreenShot

    (Selepas saya selesai menulis, saya sedar saya melakukan kesilapan dan menulis semula... == Maaf)

    balas
    0
  • ringa_lee

    ringa_lee2017-07-05 10:56:36

    Soalan ini ialah soalan algoritma yang sangat klasik Cara paling klasik ialah menggunakan 快慢指针法 Untuk soalan khusus, anda boleh pergi ke leetcode

    Ringkasnya, tentukan penunjuk pantas dan penunjuk perlahan mengambil dua langkah pada satu masa, dan penunjuk perlahan mengambil satu langkah pada satu masa.

    var hasCycle = function(head) {
        if(!head) return false;
        var faster = head;
        var slower = head;
        while (faster && faster.next) {
            faster = faster.next.next;
            slower = slower.next;
            if (slower === faster) return true;
        }
        return false;
    };

    balas
    0
  • Batalbalas