Skip to content

Commit b09da00

Browse files
committedNov 24, 2022
feat: update solutions to lc problem: No.0019
No.0019.Remove Nth Node From End of List
1 parent d6d52d8 commit b09da00

File tree

10 files changed

+140
-56
lines changed

10 files changed

+140
-56
lines changed
 

‎solution/0000-0099/0013.Roman to Integer/Solution.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
class Solution:
22
def romanToInt(self, s: str) -> int:
3-
romans = {'I': 1, 'V': 5, 'X': 10,
4-
'L': 50, 'C': 100, 'D': 500, 'M': 1000}
3+
romans = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
54
ans = 0
65
for i in range(len(s) - 1):
76
if romans[s[i]] < romans[s[i + 1]]:

‎solution/0000-0099/0019.Remove Nth Node From End of List/README.md

+49-15
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,13 @@
5050

5151
<!-- 这里可写通用的实现逻辑 -->
5252

53-
利用快慢指针。
53+
**方法一:快慢指针**
54+
55+
定义两个指针 `fast``slow`,初始时都指向链表的虚拟头结点 `dummy`
56+
57+
接着 `fast` 指针先向前移动 $n$ 步,然后 `fast``slow` 指针同时向前移动,直到 `fast` 指针到达链表的末尾。此时 `slow.next` 指针指向的结点就是倒数第 `n` 个结点的前驱结点,将其删除即可。
58+
59+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为链表的长度。
5460

5561
<!-- tabs:start -->
5662

@@ -65,7 +71,7 @@
6571
# self.val = val
6672
# self.next = next
6773
class Solution:
68-
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
74+
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
6975
dummy = ListNode(next=head)
7076
fast = slow = dummy
7177
for _ in range(n):
@@ -151,19 +157,16 @@ public:
151157
* }
152158
*/
153159
func removeNthFromEnd(head *ListNode, n int) *ListNode {
154-
dummy := &ListNode{0, head}
155-
fast := dummy
156-
slow := dummy
157-
for n > 0 {
158-
fast = fast.Next
159-
n -= 1
160-
}
161-
for fast.Next != nil {
162-
slow = slow.Next
163-
fast = fast.Next
164-
}
165-
slow.Next = slow.Next.Next
166-
return dummy.Next
160+
dummy := &ListNode{0, head}
161+
fast, slow := dummy, dummy
162+
for ; n > 0; n-- {
163+
fast = fast.Next
164+
}
165+
for fast.Next != nil {
166+
slow, fast = slow.Next, fast.Next
167+
}
168+
slow.Next = slow.Next.Next
169+
return dummy.Next
167170
}
168171
```
169172

@@ -265,6 +268,37 @@ impl Solution {
265268
}
266269
```
267270

271+
### **TypeScript**
272+
273+
```ts
274+
/**
275+
* Definition for singly-linked list.
276+
* class ListNode {
277+
* val: number
278+
* next: ListNode | null
279+
* constructor(val?: number, next?: ListNode | null) {
280+
* this.val = (val===undefined ? 0 : val)
281+
* this.next = (next===undefined ? null : next)
282+
* }
283+
* }
284+
*/
285+
286+
function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
287+
const dummy = new ListNode(0, head);
288+
let fast = dummy;
289+
let slow = dummy;
290+
while (n--) {
291+
fast = fast.next;
292+
}
293+
while (fast.next) {
294+
slow = slow.next;
295+
fast = fast.next;
296+
}
297+
slow.next = slow.next.next;
298+
return dummy.next;
299+
}
300+
```
301+
268302
### **...**
269303

270304
```

‎solution/0000-0099/0019.Remove Nth Node From End of List/README_EN.md

+42-14
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
# self.val = val
5555
# self.next = next
5656
class Solution:
57-
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
57+
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
5858
dummy = ListNode(next=head)
5959
fast = slow = dummy
6060
for _ in range(n):
@@ -138,19 +138,16 @@ public:
138138
* }
139139
*/
140140
func removeNthFromEnd(head *ListNode, n int) *ListNode {
141-
dummy := &ListNode{0, head}
142-
fast := dummy
143-
slow := dummy
144-
for n > 0 {
145-
fast = fast.Next
146-
n -= 1
147-
}
148-
for fast.Next != nil {
149-
slow = slow.Next
150-
fast = fast.Next
151-
}
152-
slow.Next = slow.Next.Next
153-
return dummy.Next
141+
dummy := &ListNode{0, head}
142+
fast, slow := dummy, dummy
143+
for ; n > 0; n-- {
144+
fast = fast.Next
145+
}
146+
for fast.Next != nil {
147+
slow, fast = slow.Next, fast.Next
148+
}
149+
slow.Next = slow.Next.Next
150+
return dummy.Next
154151
}
155152
```
156153

@@ -252,6 +249,37 @@ impl Solution {
252249
}
253250
```
254251

252+
### **TypeScript**
253+
254+
```ts
255+
/**
256+
* Definition for singly-linked list.
257+
* class ListNode {
258+
* val: number
259+
* next: ListNode | null
260+
* constructor(val?: number, next?: ListNode | null) {
261+
* this.val = (val===undefined ? 0 : val)
262+
* this.next = (next===undefined ? null : next)
263+
* }
264+
* }
265+
*/
266+
267+
function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
268+
const dummy = new ListNode(0, head);
269+
let fast = dummy;
270+
let slow = dummy;
271+
while (n--) {
272+
fast = fast.next;
273+
}
274+
while (fast.next) {
275+
slow = slow.next;
276+
fast = fast.next;
277+
}
278+
slow.next = slow.next.next;
279+
return dummy.next;
280+
}
281+
```
282+
255283
### **...**
256284

257285
```

‎solution/0000-0099/0019.Remove Nth Node From End of List/Solution.go

+11-14
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@
55
* Next *ListNode
66
* }
77
*/
8-
func removeNthFromEnd(head *ListNode, n int) *ListNode {
9-
dummy := &ListNode{0, head}
10-
fast := dummy
11-
slow := dummy
12-
for n > 0 {
13-
fast = fast.Next
14-
n -= 1
15-
}
16-
for fast.Next != nil {
17-
slow = slow.Next
18-
fast = fast.Next
19-
}
20-
slow.Next = slow.Next.Next
21-
return dummy.Next
8+
func removeNthFromEnd(head *ListNode, n int) *ListNode {
9+
dummy := &ListNode{0, head}
10+
fast, slow := dummy, dummy
11+
for ; n > 0; n-- {
12+
fast = fast.Next
13+
}
14+
for fast.Next != nil {
15+
slow, fast = slow.Next, fast.Next
16+
}
17+
slow.Next = slow.Next.Next
18+
return dummy.Next
2219
}

‎solution/0000-0099/0019.Remove Nth Node From End of List/Solution.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# self.val = val
55
# self.next = next
66
class Solution:
7-
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
7+
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
88
dummy = ListNode(next=head)
99
fast = slow = dummy
1010
for _ in range(n):
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* class ListNode {
4+
* val: number
5+
* next: ListNode | null
6+
* constructor(val?: number, next?: ListNode | null) {
7+
* this.val = (val===undefined ? 0 : val)
8+
* this.next = (next===undefined ? null : next)
9+
* }
10+
* }
11+
*/
12+
13+
function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
14+
const dummy = new ListNode(0, head);
15+
let fast = dummy;
16+
let slow = dummy;
17+
while (n--) {
18+
fast = fast.next;
19+
}
20+
while (fast.next) {
21+
slow = slow.next;
22+
fast = fast.next;
23+
}
24+
slow.next = slow.next.next;
25+
return dummy.next;
26+
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Solution:
22
def strStr(self, haystack: str, needle: str) -> int:
33
n, m = len(haystack), len(needle)
4-
for i in range(n-m+1):
5-
if haystack[i:i+m] == needle:
4+
for i in range(n - m + 1):
5+
if haystack[i : i + m] == needle:
66
return i
77
return -1

‎solution/CONTEST_README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111

1212
| 段位 | 比例 | 段位名 | 国服分数线 | 勋章 |
1313
| ----- | ------ | -------- | --------- | --------------------------------------------------------------------------- |
14-
| LV3 | 5% | Guardian | &ge;2234.22 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
15-
| LV2 | 20% | Knight | &ge;1875.44 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |
14+
| LV3 | 5% | Guardian | &ge;2235.51 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
15+
| LV2 | 20% | Knight | &ge;1875.65 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |
1616
| LV1 | 75% | - | - | - |
1717

1818
力扣竞赛 **全国排名前 10** 的用户,全站用户名展示为品牌橙色。

‎solution/CONTEST_README_EN.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ If you are in the top 25% of the contest rating, you’ll get the “Knight” b
1313

1414
| Level | Proportion | Badge | Rating | |
1515
| ----- | ---------- | ---------- | -------------- | ----------------------------------------------------------------------------------------------------------------------- |
16-
| LV3 | 5\% | Guardian | &ge;2184.20 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
17-
| LV2 | 20\% | Knight | &ge;1849.64 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |
16+
| LV3 | 5\% | Guardian | &ge;2177.33 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
17+
| LV2 | 20\% | Knight | &ge;1850.13 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |
1818
| LV1 | 75\% | - | - | - |
1919

2020
For top 10 users (excluding LCCN users), your LeetCode ID will be colored orange on the ranking board. You'll also have the honor with you when you post/comment under discuss.

‎solution/contest.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ def generate_contest_list():
127127
128128
| 段位 | 比例 | 段位名 | 国服分数线 | 勋章 |
129129
| ----- | ------ | -------- | --------- | --------------------------------------------------------------------------- |
130-
| LV3 | 5% | Guardian | &ge;2234.22 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
131-
| LV2 | 20% | Knight | &ge;1875.44 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |
130+
| LV3 | 5% | Guardian | &ge;2235.51 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
131+
| LV2 | 20% | Knight | &ge;1875.65 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |
132132
| LV1 | 75% | - | - | - |
133133
134134
力扣竞赛 **全国排名前 10** 的用户,全站用户名展示为品牌橙色。
@@ -154,8 +154,8 @@ def generate_contest_list():
154154
155155
| Level | Proportion | Badge | Rating | |
156156
| ----- | ---------- | ---------- | -------------- | ----------------------------------------------------------------------------------------------------------------------- |
157-
| LV3 | 5\% | Guardian | &ge;2184.20 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
158-
| LV2 | 20\% | Knight | &ge;1849.64 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |
157+
| LV3 | 5\% | Guardian | &ge;2177.33 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Guardian.gif" style="width: 80px;" /></p> |
158+
| LV2 | 20\% | Knight | &ge;1850.13 | <p><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/images/Knight.gif" style="width: 80px;" /></p> |
159159
| LV1 | 75\% | - | - | - |
160160
161161
For top 10 users (excluding LCCN users), your LeetCode ID will be colored orange on the ranking board. You'll also have the honor with you when you post/comment under discuss.

0 commit comments

Comments
 (0)