Linked List의 다양한 활용
1. Linked List 자유자재로 구현 (선형 자료구조 + 중간에 데이터 추가/삭제 해야하는 문제)
2. Tree or Graph에 활용

(https://leetcode.com/problems/design-browser-history/)

class ListNode:
def __init__(self, value=0, next=None, prev=None):
self.value = value
self.next = next
self.prev = prev
class BrowserHistory:
def __init__(self, homepage):
self.head = self.current = ListNode(value=homepage)
def visit(self, url):
# 새 노드를 현재 노드의 다음에 연결하고 현재 노드를 새 노드로 업데이트합니다.
self.current.next = ListNode(value=url, prev=self.current)
self.current = self.current.next
return None
def back(self, steps):
# steps 만큼 뒤로 이동하며 현재 노드를 갱신합니다.
while steps > 0 and self.current.prev is not None:
steps -= 1
self.current = self.current.prev
return self.current.value
def forward(self, steps):
# steps 만큼 앞으로 이동하며 현재 노드를 갱신합니다.
while steps > 0 and self.current.next is not None:
steps -= 1
self.current = self.current.next
return self.current.value
browserHistory = BrowserHistory("leetcode.com")
browserHistory.visit("google.com")
browserHistory.visit("facebook.com")
browserHistory.visit("youtube.com")
print(browserHistory.back(1)) # "facebook.com"
print(browserHistory.back(1)) # "google.com"
print(browserHistory.forward(1)) # "facebook.com"
browserHistory.visit("linkedin.com")
print(browserHistory.forward(2)) # "linkedin.com"
print(browserHistory.back(2)) # "google.com"
print(browserHistory.back(7)) # "leetcode.com"