linked list - Can't get LinkedList implementation to work (Python) -
i felt should make question earlier today, because problem different before. , wanted leave other question reference. pretty cluttered. if problem, let me know.
from can tell, nothing added linked list. doesn't print or give me errors, , problem. it's supposed insert words alphabetically. seems logical me. redid of insert().
i feed files single words on each line. functions of list insert , print. example text (not including blank lines):
here code:
import sys, os, copy, fileinput class node: def __init__(self, word): self.data = word self.next = none def nextnode(self): if self.next not none: return self.next else: return none def getdata(self): return self.data def setnext(self, node): self.next = node def hasnext(self): if self.next == none: return false else: return true class linked_list: def __init__(self): self.head = node(none) self.isempty = true def insert(self, word): newnode = node(word) #look position insert: #when empty if self.isempty == true: self.isempty = false self.head = newnode #when has more 2 nodes else: prev = none current = self.head nextfound = false #the next current when less node while nextfound == false , current != none: if current.getdata() < newnode.getdata(): prev = copy.copy(current) current = current.nextnode() else: nextfound = true if prev == none: nextnode = copy.copy(current) self.head = newnode self.head.setnext(nextnode) else: prev.setnext(newnode) newnode.setnext(current) def printlinkedlist(self): if self.head.getdata() == none: print("the file empty.") else: prints = self.head while prints.hasnext(): sys.stdout.write(prints.getdata() + '\n') prints.setnext(prints.nextnode()) linkedlist = linked_list() wordlist = ["hello", "jupiter", "albacore", "shrimp", "axe"] line in wordlist: linkedlist.insert(line) linkedlist.printlinkedlist()
the problem you're making copy of previous node here:
prev = copy.copy(current) so, when update copy in-place here:
prev.setnext(newnode) … doesn't affect original node that's linked list. (nor replace original node modified copy.) so, nothing ever gets changed.
to fix it, remove copy.copy.
when fix that, there's bug in code lead infinite loop of printing out "absolute", in printlinkedlist:
prints.setnext(prints.nextnode()) this doesn't useful—it sets prints.next prints.next. crucially, doesn't update variable prints point next node. this:
prints = prints.nextnode() and both of changes, output original example is:
absolute crisp daytona demand however, notice new example missing 1 value:
albacore axe hello jupiter i'll leave figure out shrimp went. (you can post new question if stuck.)
if you're wondering how found problem:
i added print statement after while loop dumps out bunch of information found previous node, including id, , print before , after setnext, see setting next member of first node each time through loop, different first node each time through.
then added print show me id of each nodes, , clear found previous node each time wasn't of nodes in list. @ point copy.copy jumped out @ me.
Comments
Post a Comment