reverse a singly linked list.
這個屬於經典問題,鍊錶反轉的思路基本上已經非常固定了。有兩種非常常見的方法:1.三指標法 2.頭插法
這個題目用到的是三指標法。
方法:設立三個指標,分別叫做pre, curr, next。這三個指標的功能分別是:現用next儲存curr的下乙個結點,免得以後找不到了。然後將curr指向pre,這一步實現了反轉,然後讓pre指向curr, curr指向next。
具體的解釋這個部落格寫的非常明晰(也包括了頭插法):
初始化的時候,pre=none,curr=pre.next , next=curr.next
#definition for singly-linked list.
#class listnode(object):
#def __init__(self, x):
#self.val = x
#self.next = none
class
solution(object):
defreverselist(self, head):
""":type head: listnode
:rtype: listnode
"""pre=none
next=none
curr=head
while
curr:
next=curr.next
curr.next=pre
pre=curr
curr=next
return pre
演算法 常見演算法題
演算法題 假如有100個不相同的數,比如從1到100,怎樣使用10次取出其中的10個不同的數字,要求每個數取出的概率一樣 一開始沒有說10次,所以我說,使用乙個random函式,以時間為種子來取,當取出乙個時,做標記,下次再取到這個數時,重新取一次 然後他就說了如果只能夠取10次怎麼辦?一開始我想到...
基礎演算法題
1.一百萬富翁遇到一陌生人,陌生人找他談乙個換錢的計畫,計畫如下 我每天給你十萬,而你每天只需要給我一分錢,第二天我仍然給你十萬元,你給我二分錢,第三天我仍然給你十萬,你給我四分錢.你每天給我的錢是前天的兩倍,直到乙個月 30天 百萬富翁很高興,欣然接受拉這個契約.請編寫乙個程式計算這乙個月中陌生人...
演算法題筆記
1 請給出乙個o nlogn 的演算法,使之能夠找出乙個n個數的序列中最長的單調遞增子串行。這是演算法導論中的一道課後題。解法一 利用求最長公共子串行的思想,將n個數的序列a先排序形成乙個有序的序列b,然後利用動態規劃的思想求a與b的最長公共子串行,得到的最長公共子串行就是所求的解。但是我們知道最長...