본문 바로가기

leetcode 풀이/LinkedList3

leetcode 24. Swap Nods in Pairs def swap(head): dummy = ListNode(0) dummy.next = head prev, curr = dummy, head while curr and curr.next: ## save prt next_ptr = curr.next.next second = curr.next ## reverse second.next = curr curr.next = next_ptr prev.next = second ## update ptrs prev = curr curr = next_ptr return dummy.next https://www.youtube.com/watch?v=o811TZLAWOo 2023. 1. 21.
leetcode 21. Merge Two Sorted Lists # Definition for singly-linked list. # class ListNode(object): # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution(object): def mergeTwoLists(self, list1, list2): """ :type list1: Optional[ListNode] :type list2: Optional[ListNode] :rtype: Optional[ListNode] """ if list1 is None: return list2 if list2 is None : return list1 head = None if list1.val < list2.v.. 2022. 8. 28.
leetcode 206. Reverse Linked List 만약에 stack을 쓰게 된다면 O(2n)의 시간복잡도와 시간복잡도가 생기기 마련이다. 하지만 우리는 포인터 개념으로 여기에 접근하면 O(n)으로도 풀이가 가능하다 바로 이전에 저장했던 이전 node들을 저장해서 포인터의 방향을 반대로 바꾸는 것이다 코드를 한번 따라가보자 현재 노드를 뜻하는 curr가 2에 있다고 가정하자. 그렇다면 이전 노드를 뜻하는 prev는 1일 것이고, 3은 curr.next 가 될 것이다. 그렇다면 아래의 코드가 이해가 될 것이다 curr.next = prev 현재 curr 노드의 next는 prev 노드로 정한다 라는 뜻이다. 그럼 prev를 이제 현재 노드로 입력을 해두어야 다음 loop를 쓸 것이다 prev = curr 위와 같이 쓸 수 있다. 자 이제 2의 다음 node.. 2022. 4. 5.