Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- dfs
- 문자열
- 미디움
- Array
- two pointers
- tree
- list
- leetcode
- DP
- 이진트리
- 재귀
- Depth-first Search
- 쉬움
- math
- easy
- 중간
- backtracking
- string
- linked list
- Medium
- recursive
- HashTable
- sorting
- binary tree
- binary search
- 리트코드
- hash table
- Python
- Binary
- matrix
Archives
- Today
- Total
부부의 코딩 성장 일기
LeetCode 83(Remove Duplicates from Sorted List, Python) 본문
Algorithm/LeetCode
LeetCode 83(Remove Duplicates from Sorted List, Python)
제로_콜라 2023. 11. 12. 19:001. 문제 링크
Remove Duplicates from Sorted List - LeetCode
Can you solve this real interview question? Remove Duplicates from Sorted List - Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well. Example 1: [https://assets.le
leetcode.com
2. 문제 설명
- 오름차순 정렬된 연결 리스트(linked list)가 주어졌을 때 중복되는 항목을 제거한 연결 리스트를 반환하는 문제
- 예시) head = [1,1,2]로 주어지면 [1, 2]를 반환. 단, 평소 list가 아님에 유의.
- 연결 리스트에 대해 처음 접하고 기록해둔 글은 이것 참고 LeetCode 21(Merge Two Sorted Lists, Python) (tistory.com)
3. 처음 풀이
- head2를 생성하고 head가 주어졌을 때 값이 다르면 head2에 이어붙여주고, 값이 같으면(중복) 이어붙이지 않는다.
- 이후 head2, head 모두 한 칸씩 이동을 반복
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
result = ListNode(-101) #주어지는 연결리스트의 val은 -100이상 100이하로 이와 겹치지 않게 설정
head2 = result
while head:
if head.val == head2.val: #값이 중복되면 head를 옮겨 저장하지 않고 그냥 다음 칸으로 이동
head = head.next
else:
head2.next = ListNode(head.val) #값이 다르면 head2의 다음 칸에 head를 옮겨 저장
head = head.next #head 다음 칸으로 이동
head2 = head2.next #head2도 다음 칸으로 이동
return result.next
4. 다른 풀이
- head2에 옮겨줄 때 ListNode(head.val)로 옮기는 것은 val 정보로만 새로 노드를 만드는 어색한 작업
- head의 노드를 그대로 옮겨주는 것이 자연스럽다.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
cur = head
while cur and cur.next:
if cur.val == cur.next.val: #현재 값과 다음 값이 같으면 다음 노드를 생략(그 다음 노드로 치환)
cur.next = cur.next.next
else: #그렇지 않으면 즉, 값이 중복되지 않으면 다음 노드를 가져오기
cur = cur.next
return head
5. 배운 점
- 연결 리스트가 아직은 어색함.
- 다른 사람들 풀이를 많이 접해봐야겠음.
'Algorithm > LeetCode' 카테고리의 다른 글
LeetCode 100(Same Tree, Python) (0) | 2023.11.15 |
---|---|
LeetCode 94(Binary Tree Inorder Traversal, Python) (1) | 2023.11.14 |
LeetCode 70(Climbing Stairs, Python) (1) | 2023.11.11 |
LeetCode 69(Sqrt(x), Python) (0) | 2023.11.10 |
LeetCode 67(Add Binary, Python) (0) | 2023.11.09 |