Rumah > Soal Jawab > teks badan
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.
滿天的星座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.next
是 b
b.next
是 c
c.next
是 a
.....
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.
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);
}
}
(Selepas saya selesai menulis, saya sedar saya melakukan kesilapan dan menulis semula... == Maaf)
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;
};