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

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

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

교수님 ppt에 있는 코드를 복사하여 실행했는데 while문에서 'str' object has no attribute 'isTail' 에러가 발생했습니다. 제가 실행한 코드를 바탕으로 어느 부분에서 잘못 됐는지 알려주시면 감사하겠습니다.

class Node:
 nodeNext = ''
 objValue = ''
 blnHead = False
 blnTail = False
def __init__(self, objValue='', nodeNext = '', blnHead = False, blnTail = False):
 self.nodeNext = nodeNext
 self.objValue = objValue
 self.blnTail = blnTail 
 self.blnHead = blnHead
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.blnHead
def isTail(self):
 return self.blnTail

node1 = Node(objValue='a')
nodeTail = Node(blnTail = True)
nodeHead = Node(blnHead = True, nodeNext = node1)

class SinglyLinkedList:
 nodeHead = ''
 nodeTail = ''
 size = 0
def __init__(self):
 self.nodeHead = Node(blnHead = True, nodeNext = self.nodeTail)
 self.nodeTail = Node(blnTail = True)

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 # (nodeTail, '', False, True)
 for itr in range(idxRetrieve + 1):
  nodeReturn = nodeReturn.getNext() # nodeReturn(nodeHead's next node) = nodeTail
 return nodeReturn # nodeHead ('a', 0)

def printStatus(self):
 nodeCurrent = self.nodeHead
 while nodeCurrent.getNext().isTail() == True: # nodeHead.getNext() -> nodeNew reference.isTail()
  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.printStatus()

list1.insertAt('c', 2)
list1.printStatus()

list1.removeAt(3)
list1.printStatus()