題目:給定一個鏈表的頭節點,輸出鏈表倒數第k個節點的值
分析:最簡單的思路就按順序訪問鏈表節點,得到鏈表的長度x之后,再次從頭節點出發,訪問到第x-k+1個節點時,就是鏈表倒數第k個節點,但是這樣的方法對前x-k+1個節點重復訪問了兩遍,效率較低。在解答鏈表相關題目時,設置兩個甚至三個指針常用的方法,在這個題目中,可以設置兩個指針,一個為a,一個為b,a先出發,在a訪問了k-1個節點時,b從頭節點出發,然后兩個指針同時向后訪問,當a訪問到最后一個節點時,b訪問到的就是倒數第k個節點,代碼如下。
def lastknode(head,k): if head==None or k==0:return None else: ahead=head#指針a
for i in range(k-1): if ahead.next!=None: ahead=ahead.next else: return None behend=head#指針b
while ahead.next!=None: ahead=ahead.next behend=behend.next return behend
在訪問的過程中,要隨時判斷當前節點指向的是否是空節點,避免出現鏈表長度小於k的情況。