2015-09-01 92 views
3

我是新來的Python,並且在學習python的過程中練習簡單的數據結構。我嘗試使用遞歸在python中找到第k個到最後一個元素的問題:遞歸地查找第k個到單個鏈接列表的最後一個元素-Python

這是我的代碼:

def kthtoLast(self,head,k,i): #recursion 
    if(head==None): 
     return 0 

    i= kthtoLast(self,head.next,k) + 1 
    if(i==k): 
     print(head.node) 
    return i 

但我得到一個錯誤 -

NameError: name 'kthtoLast' is not defined. 

雖然我已經定義了功能並創建objec後,我叫它我班的筆 -

l=LinkedList() 
l.kthtoLast(l.head,3,0) 

任何人都可以請幫助我理解我要去哪裏錯了?

完整的代碼如下所示:

class Node(object): 
    def __init__(self,node,next=None): 
     self.node=node 
     self.next=next 
class LinkedList(object): 
    def __init__(self,head=None): 
     self.head=head 
    def append(self,data): 
     new_node=Node(data,self.head) 
     self.head=new_node 
    def kLast(self,current,k): #recursion 
     if(current.next==None): 
      return 0 
     i= kLast(self,current.next,k) + 1 
     if(i==k): 
      print(current.node) 
     return i 
l=LinkedList() 
l.append(12) 
l.append(45) 
l.append(7988) 
l.append(89) 
l.append(74) 
print(l.head) 
l.kLast(l.head,3) 

回答

1

當你調用一個類的實例方法,從同一類的其他實例方法,你應該使用self.<method>(),所以在你的情況下,呼叫變成 -

i = self.kthtoLast(head.next,k) + 1 
+0

謝謝你。它的工作。點1是問題 –

0

既然你有ListNode:

class ListNode: 
def __init__(self, data=0, next=None): 
    self.data = data 
    self.next = next 

ÿ ou可以這樣做:

def find_n_to_last(node, n): 
    """Returns nth to last element from the linked list.""" 
    def find_n_to_last_helper(node, n, count): 
     if not node: 
      return None 

     result = find_n_to_last_helper(node.next, n, count) 
     if count[0] == n: 
      result = node.data 

     count[0] += 1 
     return result 

    count = [0] 
    return find_n_to_last_helper(node, n, count) 
相關問題