Skip to content

Commit 88e57f0

Browse files
committed
remove nth node from end of list solution
1 parent c423d1b commit 88e57f0

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Definition for singly-linked list.
2+
public class ListNode {
3+
public var val: Int
4+
public var next: ListNode?
5+
public init() { self.val = 0; self.next = nil; }
6+
public init(_ val: Int) { self.val = val; self.next = nil; }
7+
public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
8+
}
9+
10+
class Solution {
11+
func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
12+
// ๋’ค์—์„œ n๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ Two Pointer
13+
var slow = head
14+
var fast = head
15+
var threshold = n
16+
17+
// fast ํฌ์ธํ„ฐ๋ฅผ n๋งŒํผ ์ด๋™์‹œํ‚ด
18+
// ์ „์ฒด ๊ฐฏ์ˆ˜๋ฅผ c๊ฐœ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ๋’ค์—์„œ n๋ฒˆ์งธ ๋…ธ๋“œ๋Š” ์•ž์—์„œ c - n + 1๋ฒˆ์งธ ๋…ธ๋“œ
19+
while threshold > 0 {
20+
fast = fast?.next
21+
threshold -= 1
22+
}
23+
24+
// padding ๋…ธ๋“œ ์ƒ์„ฑ
25+
var prev: ListNode? = ListNode()
26+
// slow ํฌ์ธํ„ฐ์— ์œ„์น˜ํ•œ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ „๋žต - prev ํฌ์ธํ„ฐ๋ฅผ slow ํฌ์ธํ„ฐ์˜ ์ด์ „ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚ด
27+
prev?.next = slow
28+
29+
// ๋ฐ˜ํ™˜์„ ์œ„ํ•œ result ๋…ธ๋“œ ํฌ์ธํ„ฐ ์ƒ์„ฑ
30+
let result = prev
31+
32+
while fast != nil {
33+
prev = prev?.next
34+
slow = slow?.next
35+
fast = fast?.next
36+
}
37+
38+
// fast ๋…ธ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜ nil์ด ๋˜์—ˆ๊ณ ,
39+
// slow ๋…ธ๋“œ๋Š” ๋’ค์—์„œ n๋ฒˆ์งธ ์ž๋ฆฌ์— ์œ„์น˜ํ•ด ์žˆ์Œ
40+
// ๊ทธ๋ณด๋‹ค ํ•œ ์นธ ์•ž์— ์žˆ๋Š” prev ๋…ธ๋“œ์˜ next๋ฅผ, next?.next๋กœ ๋ฐ”๊ฟ” ์ฃผ๋ฉด, slow ๋ถ€๋ถ„์˜ ๋…ธ๋“œ ์ œ๊ฑฐ
41+
prev?.next = prev?.next?.next
42+
43+
// ๋ฐ˜ํ™˜์‹œ ๋งจ ์•ž์˜ padding ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐ
44+
return result?.next
45+
}
46+
}

0 commit comments

Comments
ย (0)