一、鍊錶
1、如何判斷乙個煉表裡有沒有環
思路:快慢指標,乙個走的快,乙個走的慢,那麼若干步以後,快慢指標會相遇。
/**
* definition for singly-linked list.
* function listnode(val)
*/var hascycle = function(head)
var slow = head; //slow pointer moves one step forward
var fast = head; //fast pointer moves two steps forward
while( true )
slow = slow.next;
fast = fast.next.next;
if( fast === slow )
}};
2、鍊錶的反轉(遞迴法)
/**
* definition for singly-linked list.
* function listnode(val)
*//**
* @param head
* @return
*/var reverselist = function(head) ;
3、刪除鍊錶的某個節點
/**
* definition for singly-linked list.
* function listnode(val)
*//**
* @param head
* @param val
* @return
*/var removeelements = function(head, val)
else
}return head.val == val ? head.next : head;
};
二、棧和佇列
1、用兩個棧實現乙個佇列
我們現在有兩個棧,乙個直觀的想法是將資料在兩個棧之間移動,以便能夠達到先進先出的目的。假設這兩個棧為棧a和棧b,棧a用來接收 enqueue 的資料,棧b用來 dequeue 資料,具體的演算法為:
enqueue:
(1) 直接將資料壓入棧a
dequeue:
(1) 如果棧b不為空,將棧b頂端的資料彈出
(2) 如果棧b為空,先將棧a中所有資料彈出,壓入棧b,再將棧b頂端的資料彈出
2、用兩個佇列實現棧
假設我們現在有佇列a和佇列b,因為比較直觀,直接上演算法:
push:
(1) 將元素加入佇列a
pop:
(1) 將佇列a的size大於1時,迴圈將佇列a中的元素移動到佇列b
(2) 將佇列a中最後剩下的元素出佇列並作為結果返回
(3) 交換佇列a和佇列b的名字
前端面試 資料結構
資料結構面試考點 棧是一種遵從後進先出 lifo,後進先出 原則的有序集合。新新增的或者待刪除的元素都儲存在棧的末尾。稱作棧頂,另一端就叫棧底。在棧裡,新元素都靠近棧頂,舊元素都接近棧底。棧的建立 function stack 接下來,是棧的方法 push element 新增新元素到棧頂。pop ...
前端面試中常見的演算法問題總結
雖說我們很多時候前端很少有機會接觸到演算法。大多都互動性的操作,然而從各大公司面試來看,演算法依舊是考察的一方面。實際上學習資料結構與演算法對於工程師去理解和分析問題都是有幫助的。如果將來當我們面對較為複雜的問題,這些基礎知識的積累可以幫助我們更好的優化解決思路。下面羅列在前端面試中經常撞見的幾個問...
前端面試總結 資料結構與演算法一
陣列是比較簡單的內容,這裡介紹陣列常用的操作。陣列的建立和初始化非常簡單,你可以通過var arr new array 或者var arr new array a b c 來建立乙個陣列。當然也可以簡單的var arr 這也是最通常的用法。需要在陣列末端追加元素,我們可以簡單的使用number nu...