이전 게시물에서 작성했던 FIFO구조 연결리스트를 이용해서
끝에서 k번째 노드 찾기를 해보겠습니다.
https://yoonkies.tistory.com/7
연결 리스트 코드는 여기를 참고해주시면 되겠습니다.
연결 리스트의 끝에서 k번째 찾기
class kFromLast(LinkedListFIFO): # 기존의 LinkedListFIFO를 상속합니다.
def find_k_from_last(self, k):
p1, p2 = self.head, self.head # p1으로 리스트 전체를 탐색하고 k만큼 차이가 날때 p2로 탐색 시작
i = 0
if k <= self.length: # k값이 잘못 입력되는 경우 방지
while p1:
p1 = p1.pointer
if i >= k: # k만큼 차이가 났을 때 p2도 다음 노드로 탐색 시작
p2 = p2.pointer
i += 1
return p2.value
else: # k값이 잘못될 경우 다음 문장을 출력 후 None을 반환
print("Wrong k!")
return None
# 결과 확인
if __name__ == "__main__":
ll = kFromLast()
k = 3
for i in range(10):
ll._push(i+1)
ll._printList()
print("연결 리스트 끝에서 {0}번째 값은 {1}입니다.".format(k,ll.find_k_from_last(k)))
# > 연결 리스트 끝에서 3번째 값은 8입니다.
만약, 숫자가 담긴 연결 리스트에서 한 항목을 선택했을 때
그 항목의 값의 왼쪽에는 그보다 작은 숫자 항목만 나오고 오른쪽에는 큰 숫자 항목만 나오도록 연결리스트를 구현해보겠습니다.
분할 전:
6 7 3 4 9 5 1 2 8
분할 후:
3 4 5 1 2 6 7 9 8
위와 같이 기존에 작성한 LinkedListFIFO 클래스를 사용하겠습니다.
연결 리스트 분할하기
def partList(ll, n):
less = LinkedListFIFO()
more = LinkedListFIFO()
node = ll.head
same = 0 # 만약 n값이 중복 여부
while node:
item = node.value
# n값보다 큰 값은 more에 n값보다 작은 값은 less에 삽입
if item < n:
less._push(item)
elif item > n:
more._push(item)
else: # n값이 중복될 경우 나중에 연속으로 삽입하기 위해 n값의 갯수만큼 same 증가
same += 1
node = node.pointer
for _ in range(same): # less 뒤에 n값 삽입, 중복된 수 만큼 연속으로 리스트에 삽입
less._push(n)
nodemore = more.head
while nodemore: # more의 노드값을 less 뒤에 삽입
less._push(nodemore.value)
nodemore = nodemore.pointer
return less
# 결과 확인
if __name__ == "__main__":
ll = LinkedListFIFO()
for i in [6, 7, 3, 4, 9, 5, 1, 2, 8, 4]:
ll._push(i)
print("분할 전 : ", end = "")
ll._printList() # 분할 전 : 6 7 3 4 9 5 1 2 8
new_ll = partList(ll, 4)
print("분할 후 : ",end = "")
new_ll._printList() # 분할 후 : 3 4 5 1 2 6 7 9 8
이상으로 연결 리스트를 가지고 응용을 연습해보았습니다.
[Python] 정렬 / 버블 정렬(Bubble sort) / 선택 정렬(Selection sort) (0) | 2021.11.24 |
---|---|
[Python] 스택 활용한 문제(문자열 거꾸로 출력, 괄호의 갯수 판별, 10진수를 n진수로 변환) (0) | 2021.11.19 |
[Python] 단일 연결 리스트(LinkedList) (0) | 2021.11.19 |
[Python] 우선순위 큐(Priority Queue)와 힙(Heap) (0) | 2021.11.18 |
[Python] 큐(Queue) 구현 (0) | 2021.11.10 |