常考煉錶筆試題(四)

2021-09-24 02:53:27 字數 1179 閱讀 4641

1、給定乙個鍊錶,判斷鍊錶中是否有環。

示例:

思路:

這道題還是利用快慢引用的思路,快的走一步,如果不為空,快的再走一步,慢的走一步,如果快引用的指向為空,說明無環,而如果快引用和慢引用的指向相等,說明有環。

具體**如下:

public

boolean

hascycle

(listnode head)

listnode fast = head;

listnode slow = head;do}

while

(fast!=null && fast!=slow);if

(fast==null)

return

true

;}

2、給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回null。思路:這道題是對上一題的擴充套件,就是在上一題的基礎上找環的入口點。方法很簡單,先找到相遇的節點,然後斷開,變成兩個鍊錶,這樣一來就變成了兩條鍊錶求交點的問題了,交點的位置就是環的入口點。

也就是說,定義兩個引用p1和p2,乙個從入口出發,乙個從快慢引用的相遇點出發,p1和p2相遇的位置就是環的入口點。

具體**如下:

public listnode detectcycle

(listnode head)

listnode fast = head;

listnode slow = head;do}

while

(fast != null && fast != slow);if

(fast == null)

listnode p1 = head;

listnode p2 = slow;

while

(p1 != p2)

return p1;

}

常考煉錶筆試題(一)

1 刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 思路 要刪除鍊錶中等於給定值的所有節點,我們可以定義乙個結果鍊錶,再結合尾插的方法來實現。定義乙個last引用,指向結果鍊錶的最後乙個節點,cur引用指向給定鍊錶的第乙個節點。...

常考煉錶筆試題(三)

1 判斷是否是回文 思路 判斷乙個鍊錶是否是回文結構,我們可以先找到這個鍊錶的中間節點middle,然後將middle節點之後的鍊錶進行反轉,得到乙個新鍊錶。再定義兩個引用,分別指向原煉表和新鍊錶的第乙個節點,然後遍歷鍊錶,從第乙個結點開始比較,如果兩個引用的值不一樣,那麼就不是回文。過程如下 所以...

煉錶筆試題

反轉鍊錶 節點 class node object def init self,elem self.elem elem self.next none 鍊錶 class singlelist object def init self,head self.head head 反轉鍊錶 defrevers...