File tree Expand file tree Collapse file tree 1 file changed +70
-0
lines changed
remove-nth-node-from-end-of-list Expand file tree Collapse file tree 1 file changed +70
-0
lines changed Original file line number Diff line number Diff line change 1+ '''
2+ # 19. Remove Nth Node From End of List
3+
4+ ## 풀이 접근방식 레퍼런스
5+ - https://www.algodale.com/problems/remove-nth-node-from-end-of-list/
6+ '''
7+ class Solution :
8+ def removeNthFromEnd (self , head : Optional [ListNode ], n : int ) -> Optional [ListNode ]:
9+ '''
10+ # 1. 노드 리스트
11+ - 음수 인덱스 원소 접근
12+ - nodes 배열을 사용하여 마지막 n번째 노드를 찾는다.
13+ - 메모리 낭비
14+ TC: O(N), SC: O(N)
15+ '''
16+ # nodes = [] # 배열
17+ # temp = ListNode(None, head)
18+ # node = temp
19+
20+ # while node:
21+ # nodes.append(node)
22+ # node = node.next
23+
24+ # nodes[-n - 1].next = nodes[-n - 1].next.next
25+
26+ # return temp.next
27+
28+ '''
29+ # 2. 큐
30+ - 큐를 사용하여 마지막 n번째 노드를 찾는다.
31+ - 최대 n+1개의 노드(필요한 범위)만 유지, 슬라이딩 윈도우
32+ TC: O(N), SC: O(N)
33+ '''
34+ # queue = deque() #큐
35+ # temp = ListNode(None, head)
36+ # node = temp
37+
38+ # for _ in range(n + 1):
39+ # queue.append(node)
40+ # node = node.next
41+
42+ # while node:
43+ # queue.popleft()
44+ # queue.append(node)
45+ # node = node.next
46+
47+ # queue[0].next = queue[0].next.next
48+ # return temp.next
49+
50+ '''
51+ # 3. 포인터
52+ - 연결 리스트의 특성 이용
53+ - 첫번째 포인터는 n번 이동하여 마지막 노드를 찾는다.
54+ - 두번째 포인터는 첫번째 포인터가 마지막 노드를 찾을 때까지 이동한다.
55+ - 두번째 포인터는 첫번째 포인터가 마지막 노드를 찾으면 첫번째 포인터의 이전 노드를 삭제한다.
56+ TC: O(N), SC: O(1)
57+ '''
58+ first = head
59+ for _ in range (n ):
60+ first = first .next
61+
62+ temp = ListNode (None , head )
63+ second = temp
64+
65+ while first :
66+ first = first .next
67+ second = second .next
68+
69+ second .next = second .next .next
70+ return temp .next
You can’t perform that action at this time.
0 commit comments