LinkedList 중복된 값 제거
📌 출처
📌 두가지 방법
🔥 Set 이용
🔥 Set 이용
node.next
의 값이 set
에 있을 경우, node.next = node.next.next
로 바꾸어준다.
값이 없을 시, node
를 다음 값으로 이동하고, 해당 node
의 값을 set
에 넣어준다.
🔥 코드
class Node:
def __init__(self,val):
self.val = val
self.next = None
def add(self,val):
node = self
while node.next is not None:
node=node.next
node.next = Node(val)
def print(self):
node = self
while node:
print(node.val)
node=node.next
def remove_duplicate(self):
hash_set = set()
node = self
hash_set.add(node.val)
while node is not None and node.next is not None:
if node.next.val in hash_set:
node.next = node.next.next
else:
node=node.next
hash_set.add(node.val)
n1 = Node(1)
n1.add(2)
n1.add(3)
n1.add(3)
n1.add(4)
n1.add(4)
n1.add(4)
n1.add(4)
n1.add(5)
n1.remove_duplicate()
n1.print()
🤡 복잡도
시간복잡도 O(n)
공간복잡도 O(n)
🔥 러너 이용
따로 버퍼공간 ( 위의 예에서
set
)을 이용하지 말고 풀어보라.
해당 node를 순회하면서, 해당 node에 해당하는 runner를 둔다.
위 그림과 같이 node는 고정하면서, runner는 앞으로 나아가며, node.val == runner.next.val
검사를 한다.
위의 경우 해당하므로
runner.next = runner.next.next
로 만들어주고, runner를 전진시킨다.
🔥 코드
class Node:
def __init__(self,val):
self.val = val
self.next = None
def add(self,val):
node = self
while node.next is not None:
node=node.next
node.next = Node(val)
def print(self):
node = self
while node:
print(node.val)
node=node.next
def remove_duplicate(self):
node = self
while node is not None and node.next is not None:
runner = node
while runner.next is not None :
if node.val == runner.next.val:
runner.next =runner.next.next
else:
runner=runner.next
node=node.next
n1 = Node(1)
n1.add(2)
n1.add(3)
n1.add(3)
n1.add(4)
n1.add(4)
n1.add(4)
n1.add(4)
n1.add(5)
n1.remove_duplicate()
n1.print()
🤡 복잡도
시간복잡도는 O(n^2)
이지만
공간복잡도는 O(1)
이다.
Author And Source
이 문제에 관하여(LinkedList 중복된 값 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@camel-man-ims/LinkedList-중복된-값-제거저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)