사진: 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(): 모든 노드를 삭제하는 함수