2014-10-21 27 views
0

鉴于该类链接值插入一个链接,给定索引

class Link: 

    """A linked list. 

    >>> s = Link(1, Link(2, Link(3, Link(4)))) 
    >>> len(s) 
    4 
    >>> s[2] 
    3 
    >>> s 
    Link(1, Link(2, Link(3, Link(4)))) 
    """ 
    empty =() 

    def __init__(self, first, rest=empty): 
     self.first = first 
     self.rest = rest 

    def __getitem__(self, i): 
     if i == 0: 
      return self.first 
     else: 
      return self.rest[i-1] 

    def __len__(self): 
     return 1 + len(self.rest) 

    def __repr__(self): 
     if self.rest: 
      rest_str = ', ' + repr(self.rest) 
     else: 
      rest_str = '' 
     return 'Link({0}{1})'.format(self.first, rest_str) 

我怎么会写这样的功能?

def insert(link, value, index): 
     """Insert a value into a Link at the given index. 

     >>> link = Link(1, Link(2, Link(3))) 
     >>> insert(link, 9001, 0) 
     >>> link 
     Link(9001, Link(1, Link(2, Link(3)))) 
     >>> insert(link, 100, 2) 
     >>> link 
     Link(9001, Link(1, Link(100, Link(2, Link(3))))) 
     >>> insert(link, 4, 5) 
     Index out of bounds 
     """ 
     "*** YOUR CODE HERE ***" 
+0

究竟是你想做些什么? – mlwn 2014-10-21 23:34:45

+0

我试图实现一个函数插入,它需要一个链接,一个值和一个索引,并将该值插入给定索引处的链接。假设链表已经至少有一个元素,并且它不返回任何东西;插入应改变链接列表 – 2014-10-21 23:39:06

+0

你做了什么尝试?你是否有特定的问题,或只是问如何做一个任务? – Parker 2014-10-21 23:50:12

回答

0

检查下面有请:

class Link: 
    empty =() 
    def __init__(self, first, rest=empty): 
     self.first = first 
     self.rest = rest 

    def __getitem__(self, i): 
     if i == 0: 
      return self.first 
     else: 
      return self.rest[i-1] 

    def __len__(self): 
     return 1 + len(self.rest) 

    def __repr__(self): 
     if self.rest: 
      rest_str = ', ' + repr(self.rest) 
     else: 
      rest_str = '' 
     return 'Link({0}{1})'.format(self.first, rest_str) 

def insert(link, value, index): 
    if index >= link.__len__(): 
     print "Index out of bounds" 
    else: 
     if index == 0: 
      tmp = link.first 
      link.first = value 
      link.rest = Link(tmp, link.rest) 
     else: 
      insert(link.rest, value, index - 1) 

a = Link(1, Link(2, Link(3, Link(4)))) 
print a 
insert(a,23,0) 
print a 
insert(a,12,2) 
print a 
insert(a,3,6) 
print a 
insert(a,3,5) 
print a 
+0

的第一个元素来测试这个脚本,当你运行python时,只需从链接导入链接键入>>> >>> – mlwn 2014-10-22 00:39:31