로그인 바로가기 하위 메뉴 바로가기 본문 바로가기

데이터 구조 및 분석: Linear Structure and Dynamic Programming

임시 이미지 KAIST 산업및시스템공학과 문일철
http://kooc.kaist.ac.kr/datastructure-2019s/forum/12379
좋아요 1779 수강생 3366

singly linked list를 만들어보는 코드를 작성중에 insertAt()에서 Node 클래스의 메소드 getNext()를 호출하는 과정에서 계속 오류가 나네요,,

'str' object has no attribute 'getNext' 이렇게 나오는데 제가 코드를 잘못 적은 것인가 아닌가 잘 모르겠네요.


제가 쓴 코드 첨부해봅니다...

class Node:
nodeNext = None
nodePrev = ''
objValue = ''
binHead = False
binTail = False

def __init__(self, objValue='', nodeNext=None, binHead=False, binTail=False):
self.nodeNext = nodeNext
self.objValue = objValue
self.binHead = binHead
self.binTail = binTail

def getValue(self):
return self.objValue

def setValue(self, objValue):
self.objValue = objValue

def getNext(self):
return self.nodeNext

def setNext(self, nodeNext):
self.nodeNext = nodeNext

def isHead(self):
return self.binHead

def isTail(self):
return self.binTail


class SinglyLinkedlist:
nodeHead = ''
nodeTail = ''
size = 0

def __init(self):
self.nodeTail = Node(binTail=True)
self.nodeHead = Node(binHead=True, nodeNext=self.nodeTail)

def insertAt(self, objInsert, idxInsert):
nodeNew = Node(objValue=objInsert)
nodePrev = self.get(idxInsert - 1)
nodeNext = nodePrev.getNext()
nodePrev.setNext(nodeNew)
nodeNew.setNext(nodeNext)
self.size = self.size + 1

def removeAt(self, idxRemove):
nodePrev = self.get(idxRemove - 1)
nodeRemove = nodePrev.getNext()
nodeNext = nodeRemove.getNext()
nodePrev.setNext(nodeNext)
self.size = self.size - 1
return nodeRemove.getValue()

def get(self, idxRetrieve):
nodeReturn = self.nodeHead
for itr in range(idxRetrieve + 1):
nodeReturn = nodeReturn.getNext()
return nodeReturn

def printStatue(self):
nodeCurrent = self.nodeHead
while nodeCurrent.getNext().isTail() == False:
nodeCurrent = nodecurrent.getNext()
print(nodeCurrent.getValue(), end=' ')
print("")

def getSize(self):
return self.size


list1 = SinglyLinkedlist()
list1.insertAt('a', 0)
list1.insertAt('b', 1)
list1.insertAt('d', 2)
list1.insertAt('e', 3)
list1.insertAt('f', 4)
list1.printStatue()
list1.insertAt('c', 2)
list1.printStatue()
list1.removeAt(3)
list1.printStatue()