2014-10-20 6 views
0

До сих пор я придумал с кодом, чтобы создать связанный список из нормального списка:Как удалить узел в связанном списке в python?

def createList(plist): 

    linkedList = None 
    # goes backwards, adding each element to the beginning 
    # of the list. 
    for index in range(len(plist)-1, -1, -1): 
     linkedList = insertValueHead(linkedList, plist[index]) 
    return linkedList 

def insertValueHead(linkedList, value): 
    newnode = {} 
    newnode["data"] = value 
    #set the next pointer of this new node to the head of the list, linkedList 
    #newnode is now the head of the list 
    newnode["next"] = linkedList 
    return newnode 

def listString(linkedList): 
    ptr = linkedList 
    str1 = '' 
    while ptr != None: 
    str1 += str(ptr['data']) 
    ptr = ptr['next'] 
    if ptr != None: 
     str1 += "->" 
    str1 = str1 
    return str1 

Используя этот код, я смог превратить обычный список таких как [1,2,3,4 ] в это вместо того, запустив createList (PLIST):

{'data': 1, 'next': {'data': 2, 'next': {'data': 3, 'next': {'data': 4, 'next': None}}}} 

Прямо сейчас, что я пытаюсь сделать, это удалить любой узел, который так же, как другой узел в связанном списке. Поэтому, если бы я должен был запустить программу со списком, например [1,1,2,5,7,7,8,8,10,10,10,10,10], он вернул бы 1,2,5,7 8,10. Мне было интересно, как я собираюсь удалить дублирующие узлы из словаря (связанного списка), который я создаю. До сих пор это код, который я придумал, но я не знаю, куда идти отсюда:

def noDups(plist): 
    node = plist 
    while node['next'] != None: 
     if node['data'] == node['next']['data']: 
      del node['next'] 
     return node 

И проверить это функция, я использую:

def testNoDups(): 
nums = createList([1,1,2,5,7,7,8,8,10,10,10,10,10]) 
print noDups(nums) 

Любая помощь очень ценится! :)

+0

Я не понимаю, хотите ли вы просто решить «не дублировать элементы в моей проблеме списка» или попросить структуру, которая эффективно внедряет и удаляет –

ответ

2

Просто сделайте набор из списка, конвертируйте обратно в список, и все дубликаты будут удалены.

def createList(plist): 

    linkedList = None 
    # goes backwards, adding each element to the beginning 
    # of the list. 
    plist = list(set(plist)) 
    for index in range(len(plist)-1, -1, -1): 
     linkedList = insertValueHead(linkedList, plist[index]) 
    return linkedList 

Это позволит устранить дубликаты от plist до того, как индексом in the range и plist останется только уникальное значение. Это то, что вы ищете или пытаетесь устранить только последовательные повторяющиеся значения?

Смежные вопросы