사진: Unsplash의Lionello DelPiccolo
__init__()
, __len__()
add_first()
add_last()
print()
search()
__contains__()
remove_first()
remove_last()
remove()
remove_at()
clear()
이미지 출처: gongsam21의 티스토리
Any
: 모든 타입
int
: 정수
float
: 정수 또는 실수
str
: 문자열
list
: 리스트
⭐list[int]
: 정수를 원소로 가지는 리스트
list[str]
: 문자열을 원소로 가지는 리스트
tuple
: 튜플
⭐tuple[int,str,int]
: 정수, 문자열, 정수를 원소로 가지는 튜플
예) (2, "ABC", 14)
dict
: 딕셔너리
⭐dict[str, int]
: 키는 문자열 타입, 값은 정수형인 딕셔너리
예) {"abc": 1, "def":2}
노드 하나당 하나의 데이터를 가짐
아무 값도 안 넣으면 None이 기본값
next
는 뒤에 붙은 node를 가리킴
next
의 데이터 타입은 class로 정의한 Node
노드에 데이터를 입력한 뒤 노드끼리 next
속성으로 연결해준다.
no
: 리스트에 등록되어 있는 노드의 개수head
: 머리노드에 대한 참조__init__()
: 생성자(초기화하는 함수)__len__()
: 연결리스트의 노드 개수를 리턴하는 함수len()
add_first
: 맨 앞에 노드를 삽입하는 코드next
로 연결ptr = self.head
기존 머리 노드를
ptr
변수에 저장한다.
self.head = Node(data, ptr)
머리노드를 'A'에서 ('G', 'A')로 변경했다. 'A'가 삭제되었다가 다시 두 번째 노드로 추가되었으므로 'G'노드가 새롭게 추가된 효과가 나타난다.
self.no += 1
self.no
는 수동으로 기록해 주어야 하는 속성이다. 노드가 하나 추가되었으므로 개수도 1 더해준다.self.no = self.no + 1
로도 쓸 수 있다.
add_last()
: 맨 뒤에 노드를 삽입하는 함수if self.head is None: self.add_first(data)
머리노드가
None
이면self.head
를 불러올 때 오류가 발생하므로if
문을 통해 처리를 해준다. 빈 노드면 단순히 맨 앞에 노드를 삽입하기만 하면 된다.
else: ptr = self.head while ptr.next is not None: ptr = ptr.next ptr.next = Node(data) self.no += 1
빈 노드가 아니면 머리노드를
ptr
변수에 저장한 다음next
가None
일 때까지(노드가 끝날 때까지)ptr
을next
(이동)한 다음,ptr
뒤에 새 노드를 추가해준다. 위에서와 마찬가지로self.no
를 수동으로 카운트해준다.
print()
: 연결리스트의 모든 노드들을 출력하는 함수search()
: 매개변수 data와 값이 같은 노드의 위치를 리턴하는 함수__contains__()
: 데이터 포함 여부를 판단하는 함수remove_first()
: 머리 노드를 삭제하는 함수head.next
를 머리 노드에 대한 참조인 head
에 대입함remove_last()
: 꼬리 노드를 삭제하는 함수remove_first()
함수 호출remove()
: p
(어떤 노드건 선택 가능)가 지목하는 노드를 삭제하는 함수p
가 존재할 경우p
가 머리 노드면 remove_first()
호출p
가 머리 노드가 아니면 p
이전 노드를 이용하여 next
값인 p
노드를 삭제remove_at()
: index에 위치한 노드를 삭제clear()
: 모든 노드를 삭제하는 함수