본문 바로가기

linked list10

[자료구조] Linked List 클래스 구현 class Node: def __init__(self, item): self.data = item self.next = None class LinkedList: def __init__(self): self.nodeCount = 0 self.head = Node(None) self.tail = None self.head.next = self.tail def traverse(self): result = [] curr = self.head while curr.next: curr = curr.next result.append(curr.data) return result def getAt(self, pos): if pos self.nodeCount: return None i = 0 curr.. 2021. 4. 20.
[자료구조] (singly) Linked List 파이썬 연결리스트를 끝까지 순회하는 방법 LeetCode 같은 경우 # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next def traverse(self): if self.head == None: return [] curr = self.head res = [] while curr: res.append(curr.data) curr = curr.next return res 2021. 4. 20.
[LeetCode] Delete Node in a Linked List 파이썬 (linked list) class Solution: def deleteNode(self, node): if node and node.next: node.val = node.next.val # swap current val to next val node.next = node.next.next # jump next to next.next 2021. 4. 7.
[LeetCode] Palindrome Linked List 파이썬 class Solution: # @param {ListNode} head # @return {boolean} def isPalindrome(self, head): # get mid point cur = head N = 0 while cur: N += 1 cur = cur.next mid = N//2 i = 0 def reverse(head): ans = None while head: nx = head.next head.next = ans ans = head head = nx return ans first = second = head # to mid point while i < mid: second = second.next i += 1 second = reverse(second) # check palind.. 2021. 4. 6.
[LeetCode] Reverse Linked List 파이썬 iterative way # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseList(self, head: ListNode) -> ListNode: prev = None curr = head while curr: nxt = curr.next curr.next = prev prev = curr curr = nxt return prev recursive way class Solution: # @param {ListNode} head # @return {ListNode} def re.. 2021. 4. 5.
[LeetCode] Remove Linked List Elements 파이썬 (linked list) class Solution: # @param {ListNode} head # @param {integer} val # @return {ListNode} def removeElements(self, head, val): dummy = ListNode(float("-inf")) dummy.next = head prev, curr = dummy, dummy.next while curr: if curr.val == val: prev.next = curr.next else: prev = curr curr = curr.next return dummy.next dummy를 만들고 dummy의 카피인 prev, curr 2개를 만들어서 문제해결 dummy 하나만 쓰고 하는 풀이 class Solution: def re.. 2021. 4. 4.
[LeetCode] Intersection of Two Linked Lists (switch) 솔루션 # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: p1 = headA p2 = headB while p1 != p2: if p1: p1 = p1.next else: p1 = headB if p2: p2 = p2.next else: p2 = headA return p1 while 문 조건을 p1 != p2 기준으로 두 node가 같은 경우 while문 중단한다. node가 다른 경우 .. 2021. 4. 2.
[LeetCode] Linked List Cycle 파이썬 (is operator, id) 2가지 풀이법(1: fast & slow, 2: marked as read) 풀이 1 (fast, slow) class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: # @param head, a ListNode # @return a boolean def hasCycle(self, head): fast, slow = head, head while fast and fast.next: fast, slow = fast.next.next, slow.next if fast is slow: return True return False 어떻게 풀어야 할지 전혀 감이 안왔던 문제 fast, slow라는 2개의 head 의 c.. 2021. 4. 1.
[LeetCode] Remove Duplicates from Sorted List 파이썬 (Linked List, shallow copy, deepcopy) 하위 95% 솔루션 😱 64ms # 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: ListNode) -> ListNode: total = [] while head: total.append(head.val) head = head.next total = list(sorted(set(total))) print(total) answer = None for i in range(len(total)): if i == 0: answer = ListNo.. 2021. 3. 31.