Skip to content

Commit 692acff

Browse files
committed
feat: update leetcode solutions: No.0019. Remove Nth Node From End of List
1 parent f69c63a commit 692acff

File tree

5 files changed

+163
-45
lines changed

5 files changed

+163
-45
lines changed

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

+64-4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
<!-- 这里可写通用的实现逻辑 -->
2828

29+
利用快慢指针。
30+
2931
<!-- tabs:start -->
3032

3133
### **Python3**
@@ -40,13 +42,12 @@
4042
# self.next = next
4143
class Solution:
4244
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
43-
dummy = ListNode(0, head)
45+
dummy = ListNode(next=head)
4446
p = q = dummy
4547
for i in range(n):
4648
p = p.next
47-
while p.next is not None:
48-
p = p.next
49-
q = q.next
49+
while p.next:
50+
p, q = p.next, q.next
5051
q.next = q.next.next
5152
return dummy.next
5253
```
@@ -83,6 +84,65 @@ class Solution {
8384
}
8485
```
8586

87+
### **C++**
88+
89+
```cpp
90+
/**
91+
* Definition for singly-linked list.
92+
* struct ListNode {
93+
* int val;
94+
* ListNode *next;
95+
* ListNode() : val(0), next(nullptr) {}
96+
* ListNode(int x) : val(x), next(nullptr) {}
97+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
98+
* };
99+
*/
100+
class Solution {
101+
public:
102+
ListNode* removeNthFromEnd(ListNode* head, int n) {
103+
ListNode* dummy = new ListNode(0, head);
104+
ListNode* p = dummy;
105+
ListNode* q = dummy;
106+
while (n-- > 0) {
107+
p = p->next;
108+
}
109+
while (p->next != nullptr) {
110+
p = p->next;
111+
q = q->next;
112+
}
113+
q->next = q->next->next;
114+
return dummy->next;
115+
}
116+
};
117+
```
118+
119+
### **Go**
120+
121+
```go
122+
/**
123+
* Definition for singly-linked list.
124+
* type ListNode struct {
125+
* Val int
126+
* Next *ListNode
127+
* }
128+
*/
129+
func removeNthFromEnd(head *ListNode, n int) *ListNode {
130+
dummy := &ListNode{Val:0, Next:head}
131+
p := dummy
132+
q := dummy
133+
for n > 0 {
134+
p = p.Next
135+
n--
136+
}
137+
for p.Next != nil {
138+
p = p.Next
139+
q = q.Next
140+
}
141+
q.Next = q.Next.Next
142+
return dummy.Next
143+
}
144+
```
145+
86146
### **...**
87147

88148
```

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

+62-4
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,12 @@ After removing the second node from the end, the linked list becomes <strong>1-&
4040
# self.next = next
4141
class Solution:
4242
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
43-
dummy = ListNode(0, head)
43+
dummy = ListNode(next=head)
4444
p = q = dummy
4545
for i in range(n):
4646
p = p.next
47-
while p.next is not None:
48-
p = p.next
49-
q = q.next
47+
while p.next:
48+
p, q = p.next, q.next
5049
q.next = q.next.next
5150
return dummy.next
5251
```
@@ -81,6 +80,65 @@ class Solution {
8180
}
8281
```
8382

83+
### **C++**
84+
85+
```cpp
86+
/**
87+
* Definition for singly-linked list.
88+
* struct ListNode {
89+
* int val;
90+
* ListNode *next;
91+
* ListNode() : val(0), next(nullptr) {}
92+
* ListNode(int x) : val(x), next(nullptr) {}
93+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
94+
* };
95+
*/
96+
class Solution {
97+
public:
98+
ListNode* removeNthFromEnd(ListNode* head, int n) {
99+
ListNode* dummy = new ListNode(0, head);
100+
ListNode* p = dummy;
101+
ListNode* q = dummy;
102+
while (n-- > 0) {
103+
p = p->next;
104+
}
105+
while (p->next != nullptr) {
106+
p = p->next;
107+
q = q->next;
108+
}
109+
q->next = q->next->next;
110+
return dummy->next;
111+
}
112+
};
113+
```
114+
115+
### **Go**
116+
117+
```go
118+
/**
119+
* Definition for singly-linked list.
120+
* type ListNode struct {
121+
* Val int
122+
* Next *ListNode
123+
* }
124+
*/
125+
func removeNthFromEnd(head *ListNode, n int) *ListNode {
126+
dummy := &ListNode{Val:0, Next:head}
127+
p := dummy
128+
q := dummy
129+
for n > 0 {
130+
p = p.Next
131+
n--
132+
}
133+
for p.Next != nil {
134+
p = p.Next
135+
q = q.Next
136+
}
137+
q.Next = q.Next.Next
138+
return dummy.Next
139+
}
140+
```
141+
84142
### **...**
85143

86144
```
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode() : val(0), next(nullptr) {}
7+
* ListNode(int x) : val(x), next(nullptr) {}
8+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9+
* };
10+
*/
111
class Solution {
212
public:
313
ListNode* removeNthFromEnd(ListNode* head, int n) {
4-
ListNode *p, *q ;
5-
q = head ;
6-
p = head ;
7-
8-
for (int i = 0; i < n; ++i)
9-
q = q->next ;
10-
11-
if (!q)
12-
{
13-
return head->next ;
14+
ListNode* dummy = new ListNode(0, head);
15+
ListNode* p = dummy;
16+
ListNode* q = dummy;
17+
while (n-- > 0) {
18+
p = p->next;
1419
}
15-
16-
while (q->next)
17-
{
18-
q = q->next ;
19-
p = p->next ;
20+
while (p->next != nullptr) {
21+
p = p->next;
22+
q = q->next;
2023
}
21-
22-
p->next = p->next->next ;
23-
return head ;
24+
q->next = q->next->next;
25+
return dummy->next;
2426
}
2527
};

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

+13-14
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,17 @@
66
* }
77
*/
88
func removeNthFromEnd(head *ListNode, n int) *ListNode {
9-
node0 := &ListNode{Val:0}
10-
node0.Next = head
11-
left := node0
12-
right := node0
13-
for n>0 {
14-
right = right.Next
15-
n--
16-
}
17-
for right.Next != nil {
18-
left = left.Next
19-
right = right.Next
20-
}
21-
left.Next = left.Next.Next
22-
return node0.Next
9+
dummy := &ListNode{Val:0, Next:head}
10+
p := dummy
11+
q := dummy
12+
for n > 0 {
13+
p = p.Next
14+
n--
15+
}
16+
for p.Next != nil {
17+
p = p.Next
18+
q = q.Next
19+
}
20+
q.Next = q.Next.Next
21+
return dummy.Next
2322
}

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

+4-5
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@
55
# self.next = next
66
class Solution:
77
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
8-
dummy = ListNode(0, head)
8+
dummy = ListNode(next=head)
99
p = q = dummy
1010
for i in range(n):
1111
p = p.next
12-
while p.next is not None:
13-
p = p.next
14-
q = q.next
12+
while p.next:
13+
p, q = p.next, q.next
1514
q.next = q.next.next
16-
return dummy.next
15+
return dummy.next

0 commit comments

Comments
 (0)