忘記當時問的啥了,因為聊的比較多,記性不好.大概是"如何判斷鍊是否有環"只依稀記得這個意思...謝謝各位幫我把問題糾正下.我主要想知道問的是什麼.
這個問的有點厲害
var a = { val: 'a' }, b = { val: 'b' }, c = { val: 'c' }; a.next = b; b.next = c; c.next = a;
a.next 是 bb.next 是 cc.next 是 a
a.next
b
b.next
c
c.next
a
是
..... ..... 如果執行以下循環
.....
如果執行以下循環
var temp = a; while(tamp){ temp = temp.next; }
這樣的
遞歸 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
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); } }
這題目是一個非常經典的演算法題,最經典的做法是使用 快慢指針法 ,具體題目可以移步 leetcode
快慢指針法
簡單來說,定義快指針和慢指針,快的一次走兩步,慢的一次走一步,如果他們兩個能相遇,則說明有環。
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; };
這個問的有點厲害
c.nexta.next
是b
b.next
是c
c.next
是a
是
a
那麼將會是個死循環,temp會被如下賦值:.....
.....如果執行以下循環
a => b => c => a => b .....
這樣的
abc就是構成了一個環
遞歸 ScreenShot
🎜🎜🎜 🎜(寫完發現寫錯又重寫... = = 抱歉了)🎜這題目是一個非常經典的演算法題,最經典的做法是使用
快慢指針法
,具體題目可以移步 leetcode簡單來說,定義快指針和慢指針,快的一次走兩步,慢的一次走一步,如果他們兩個能相遇,則說明有環。