File tree 2 files changed +67
-0
lines changed
remove-nth-node-from-end-of-list
2 files changed +67
-0
lines changed Original file line number Diff line number Diff line change
1
+ from typing import Optional
2
+
3
+
4
+ # Definition for singly-linked list.
5
+ class ListNode :
6
+ def __init__ (self , val = 0 , next = None ):
7
+ self .val = val
8
+ self .next = next
9
+
10
+
11
+ class Solution :
12
+ def removeNthFromEnd (self , head : Optional [ListNode ], n : int ) -> Optional [ListNode ]:
13
+ """
14
+ - Idea: ๋ ํฌ์ธํฐ(slow, fast)๋ฅผ ์ฌ์ฉํ์ฌ slow๊ฐ ์ญ์ ํ ๋
ธ๋์ ์ด์ ๋
ธ๋์ ์์นํ๋๋ก ํ๋ค.
15
+ slow.next๋ฅผ ์กฐ์ ํ์ฌ ์ญ์ ํ ๋
ธ๋๋ฅผ ๊ฑด๋๋ฐ๋๋ก ํ๋ค.
16
+ ์ญ์ ํ ๋
ธ๋๊ฐ head์ผ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋จํ ์ฒ๋ฆฌํ๊ธฐ ์ํด dummy ๋
ธ๋๋ฅผ ์ฌ์ฉํ๋ค.
17
+ - Time Complexity: O(n). n์ ๋ฆฌ์คํธ์ ๋
ธ๋ ์.
18
+ ์ต๋ ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ์ํํ์ฌ ์ญ์ ํ ๋
ธ๋๋ฅผ ์ฐพ๊ณ ์ ๊ฑฐํ๋ฏ๋ก O(n)์ด ์์๋๋ค.
19
+ - Space Complexity: O(1).
20
+ dummy ๋
ธ๋์ slow, fast ํฌ์ธํฐ๋ฅผ ์ํ ์์ ๊ณต๊ฐ๋ง ํ์ํ๋ค.
21
+ """
22
+
23
+ dummy = ListNode (0 )
24
+ dummy .next = head
25
+ slow , fast = dummy , dummy
26
+
27
+ for _ in range (n + 1 ):
28
+ fast = fast .next
29
+
30
+ while fast :
31
+ slow = slow .next
32
+ fast = fast .next
33
+
34
+ slow .next = slow .next .next
35
+
36
+ return dummy .next
Original file line number Diff line number Diff line change
1
+ from typing import Optional
2
+
3
+
4
+ # Definition for a binary tree node.
5
+ class TreeNode :
6
+ def __init__ (self , val = 0 , left = None , right = None ):
7
+ self .val = val
8
+ self .left = left
9
+ self .right = right
10
+
11
+
12
+ class Solution :
13
+ def isSameTree (self , p : Optional [TreeNode ], q : Optional [TreeNode ]) -> bool :
14
+ """
15
+ - Idea: ๋ ํธ๋ฆฌ๋ ๊ตฌ์กฐ๊ฐ ๊ฐ๊ณ , ๊ฐ ๋
ธ๋์ ๊ฐ์ด ๊ฐ์์ผ ๊ฐ์ ํธ๋ฆฌ๋ผ๊ณ ๊ฐ์ฃผํ๋ค.
16
+ ์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ฌ๊ท์ ์ผ๋ก ๊ฐ ๋
ธ๋๋ฅผ ๋น๊ตํ๋ค.
17
+ - Time Complexity: O(n). n์ ํธ๋ฆฌ์ ๋
ธ๋ ์.
18
+ ๋ ํธ๋ฆฌ์ ๋ชจ๋ ๋
ธ๋๋ฅผ ๋น๊ตํด์ผ ํ๋ฏ๋ก O(n)์ด ์์๋๋ค.
19
+ - Space Complexity: O(n). n์ ๋ฆฌ์คํธ์ ๋
ธ๋ ์.
20
+ ์ฌ๊ท ํธ์ถ๋ก ์ธํด ํธ์ถ ์คํ์ ์ํ ๊ณต๊ฐ์ด ํ์ํ๋ฉฐ, ์ต์
์ ๊ฒฝ์ฐ O(n)๊น์ง ํ์ํ ์ ์๋ค.
21
+ """
22
+
23
+ if not p and not q :
24
+ return True
25
+ if not p or not q or p .val != q .val :
26
+ return False
27
+
28
+ is_left_equal = self .isSameTree (p .left , q .left )
29
+ is_right_equal = self .isSameTree (p .right , q .right )
30
+
31
+ return is_left_equal and is_right_equal
You canโt perform that action at this time.
0 commit comments