개요
Sigle Linked List 문제 모음
- 데이터를 뒤에 추가하는 방법 - Print the Elements of a Linked List
- 데이터를 앞에 추가하는 방법 - Insert a node at the head of a linked list
- 데이터를 특정 index에 추가하는 방법 - Insert a node at a specific position in a linked list
sigle linked list 문제들을 풀면서 sigle linked list에 익숙해지도록 연습하였다.
single linked list 개요
single linked list는 선형 구조1로 되어 있으며, Node2 라는 데이터의 모음으로 이루어져 있다.
single linked list는 Node가 저장 할 데이터와 다음 데이터를 가리키는 pointer로 구성되어 있다.
linked
라는 용어가 사용하는데 이는 node끼리 연결
되어 있다고 생각하면 된다.
single
이라는 용어는 node를 검색할 때 단방향
으로 연결되어 있다고 보면 된다 한쪽 방향으로만 검색할 수 있으며, 뒤로는 돌아갈 수 없다.
single linked list 구현
각 문제에서는 파이썬으로 single linked list가 이미 SinglelyLinkedList
로 구현되어 있고, node도 마찬가지로 SinglyLinkedListNode
로 구현되어 있다.
문제를 디버깅하기 위해 이를 개인 환경에서 똑같이 구현해보자.
요구사항
위의 3문제는 SinglelyLinkedList
와 SinglyLinkedListNode
를 아래의 요구사항대로 구현하면 충분히 디버깅이 가능하다.
1. SinglelyLinkedList는 single linked list 전체를 저장하는 class이다.
2. SinglelyLinkedList의 맴버는 첫 SinglyLinkedListNode의 포인터 값을 저장하는 head로 구성된다.
3. SinglelyLinkedList의 메소드는 insert_node로 SinglyLinkedListNode를 뒤쪽 방향으로 연결해주는 메소드이다.
4. SinglyLinkedListNode의 맴버는 data와 next로 구성되어 있고, next는 SinglyLinkedListNode 종류의 값을 저장한다.
코드 작성
코드는 아래와 같이 작성하였다. main에서는 위의 문제와 같이 받을 정수의 개수를 입력받은 후 순차적으로 정수를 입력하면, 데이터가 순차적으로 뒤로 추가가 된다.
요구사항
- SinglelyLinkedList는 single linked list 전체를 저장하는 class이다.
- SinglelyLinkedList의 맴버는 첫 SinglyLinkedListNode의 포인터 값을 저장하는 head로 구성된다.
- SinglelyLinkedList의 메소드는 insert_node로 SinglyLinkedListNode를 뒤쪽 방향으로 연결해주는 메소드이다.
- SinglyLinkedListNode의 맴버는 data와 next로 구성되어 있고, next는 SinglyLinkedListNode 종류의 값을 저장한다.
이렇게 작성하면서 아래의 요구사항 전부를 만족하도록 구현하였다.
문제 풀이
1. 데이터를 뒤에 추가하는 방법
single linked list를 출력하는 코드이다.
이미 위에서 insert_node를 구현하였다면 마찬가지로 head부터 데이터가 있는지 확인하고, 데이터가 있으면 출력한 뒤, Node의 Next로 다음 데이터를 확인할 때까지 출력하면 된다.
2. 데이터를 앞에 추가하는 방법
위의 요구사항대로 구현한게 데이터를 뒤쪽으로 추가했다면, 이번엔 새로운 데이터를 앞에 추가하는 법을 물어보는 문제이다.
자료구조를 생각할 때 아래의 그림처럼 그림을 그려 순차적으로 어떻게 접근해야 하는지 시각화한다면, 바로 코드를 구현하는 것 보다 좀 더 편하다고 생각한다.
head
값을 새로운 Node로 변경하면 데이터를 앞으로 추가할 수 있다. 코드는 아래와 같다.
문제 전체 풀이를 가져왔는데, 19줄
을 보면 llist.head를 넘기면서 시작하기에 llist를 head라고 생각하고 문제를 풀면 된다.
3. 데이터를 특정 index에 추가하는 방법
이제 문제다운 문제가 나온다, 특정 index에 새로운 node를 추가하는 방법으로. index는 0부터 시작한다고 한다.
아래의 그림처럼 index 3에 데이터를 넣는다고 하는 경우를 생각한 다음 문제를 풀어보자.
그림 3
의 2번 step을 보면, 2번 index의 next를 바로 새로운 Node에 덮어씌우지 않고, 새로운 Node가 2번 index의 next를 저장한 후 작업하는 점을 주목하자.
코드는 아래와 같다.
isertNodeAtPosition.py | |
---|---|