2018~/파이썬 자료구조 알고리즘
02b. 단일 연결 리스트(singly linked list) - iii. 출력
반원_SemiCircle
2019. 4. 29. 03:44
출력
head가 가리키는 노드부터 순차적으로 접근할 수 있습니다.
head를 통해서 첫 노드에 접근하고, 이후 노드가 가지고 있는 변수 next를 통해서 다음 노드로 이동합니다. 만일 next의 변수가 None이라면 해당 노드가 마지막 위치의 노드란 얘기겠죠?
저장된 노드가 없을 때
그냥 없다라는 출력을 해주겠습니다.
저장된 노드가 있을 때
먼저 head가 가리키는 Node의 value를 출력하고, 이후 변수 next가 None이 아니라면 next를 통하여 다음 노드로 이동하고 value를 출력합니다. 이 과정을 next가 None일 때까지 반복합니다.
코드 구현
#단일 링크드 리스트
class SLinkedList:
#S_L_list에서 쓸 노드
class Node:
def __init__(self, v, n = None):
self.value = v #저장된 데이터
self.next = n #다음 노드 가리키는 변수
#S_L_List에서 필요한 변수
def __init__(self):
self.head = None #첫 생성시 내부에는 노드가 없으므로
#삽입
def insertNode(self, v): #추가할 데이터
#만일 처음 노드일 경우 -> head값이 None임
if self.head is None :
#head에 새 노드를 저장
self.head = self.Node(v)
else: #이미 노드가 있는 경우
# head에 새 노드를 저장
# 기존 head에 저장된 노드는 새로 생성할 노드의 next로 저장
self.head = self.Node(v,self.head)
def printNode(self):
#데이터가 없을 때
if self.head is None:
print("저장된 데이터가 없음")
return
else:
print("<현재 리스트 구조>", end='\t') #end로 print 마지막 개행을 변경할 수 있습니다.
link = self.head #처음은 head를 지정. 이후부터는 현 노드의 next를 지정
#link가 가리키는 노드가 없을 때까지 반복
#None,0,""는 조건판단에서 False 처리, 그 외는 True로 처리된다.
while link :
print(link.value, '->' , end = ' ')
link = link.next #link를 현 위치 노드의 next로 변경
print() #줄바꿈 용
##테스트
if __name__=="__main__":
sl = SLinkedList()
sl.printNode() # 출력
sl.insertNode('1st')
sl.insertNode('2nd')
sl.insertNode('3rd')
sl.printNode() #출력
위키독스 연재 : https://wikidocs.net/book/2868