劍指offer 鏈表(下)
T22-鏈表中倒數第k個節點
注意走(k-1)步的循環中,判斷p==None就返回,即鏈表長度小于k的情況
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def FindKthToTail(self, head, k):
# write code here
if k<1 or not head:
return None
p,p1 = head,head
for i in range(k-1):
p = p.next
if not p:
return None
while p.next:
p = p.next
p1 = p1.next
return p1
T24-反轉鏈表
非遞歸寫法 py2
對于看似復雜的問題,看分解的每一部分怎么操作也許是最好的方法。 此題也是,只關注鏈表的每個節點,這個單向鏈表的節點,它的后節點指向變為哪里,而不關心多個節點是怎樣連接的。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
if not pHead or not pHead.next:
return pHead
ppre,pnext=None,None
p = pHead
while p:
pnext = p.next
p.next = ppre
ppre = p
p = pnext
return ppre
遞歸寫法 py2
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
return self._reverse(pHead,None)
def _reverse(self,node,prev=None):
if not node:
return prev
n = node.next
node.next = prev
return self._reverse(n,node)
浙公網安備 33010602011771號