2015-07-24 3 views
-3

Я хочу создать функцию get_element (n), которая возвращает элемент отдельно связанного списка в зависимости от положения элемента в списке. Если я отправлю -1 функции, я хочу, чтобы последний элемент был возвращен, если он равен -2, функция возвращает второй к последнему элементу и так далее. Как я могу это сделать без изменения списка или введения дополнительных атрибутов (размер или аналогичный)? Если я хочу второй до последнего, я могу сделать это, пройдя список до current.next.next == Нет, третий до последнего с current.next.next.next == Нет, но я не знаю, как обобщить его. Я был бы признателен, если бы кто-нибудь мог написать мне этот фрагмент кода на любом языке, в Python.Доступ к определенному элементу связанного списка

+1

Оставьте очередь последних посещенных элементов '-n' и возьмите свой первый элемент, когда вы достигнете' None'. Почти эквивалентно изменению списка, но это действительно единственный способ сделать это. – Ryan

ответ

0

Python, вероятно, не самый лучший язык, чтобы выбрать, как функциональность вы хотите уже построен в:

def get_element(n): 
    my_list = ["The", "cat", "sat", "on", "the", "mat."] 
    return my_list[n] 


print get_element(0) 
print get_element(-1) 
print get_element(-2) 

Что бы дать:

The 
mat. 
the 

Как уже упоминалось, вы можете моделировать вашу проблему с использованием очереди:

import collections 


def get_element(n): 
    my_list = ["The", "cat", "sat", "on", "the", "mat."] 

    if n >= 0: 
     for index, element in enumerate(my_list): 
      if index == n: 
       return element 

     # Return last element if beyond the range 
     return element 
    else: 
     queue = collections.deque(maxlen=-n) # Used to simulate a queue 

     for element in my_list: 
      queue.append(element) 

     return queue.popleft() 


print get_element(0) 
print get_element(-1) 
print get_element(-2) 

что бы дать:

The 
mat. 
the