Skip to content

Commit d58502c

Browse files
committed
feat: add solutions to lc problem: No.1669
No.1669.Merge In Between Linked Lists
1 parent e3d313f commit d58502c

File tree

6 files changed

+210
-25
lines changed

6 files changed

+210
-25
lines changed

solution/1600-1699/1669.Merge In Between Linked Lists/README.md

Lines changed: 77 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@
4848

4949
<!-- 这里可写通用的实现逻辑 -->
5050

51+
**方法一:模拟**
52+
53+
直接模拟题目中的操作即可。
54+
55+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为链表 `list1` 的长度。
56+
5157
<!-- tabs:start -->
5258

5359
### **Python3**
@@ -69,10 +75,11 @@ class Solution:
6975
p = p.next
7076
for _ in range(b + 1):
7177
q = q.next
78+
t = list2
79+
while t.next:
80+
t = t.next
81+
t.next = q
7282
p.next = list2
73-
while list2.next:
74-
list2 = list2.next
75-
list2.next = q
7683
return list1
7784
```
7885

@@ -93,21 +100,83 @@ class Solution:
93100
*/
94101
class Solution {
95102
public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
96-
ListNode p = list1;
103+
ListNode p = list1, q = list1;
97104
for (int i = 0; i < a - 1; ++i) {
98105
p = p.next;
99106
}
100-
ListNode q = list1;
101107
for (int i = 0; i < b + 1; ++i) {
102108
q = q.next;
103109
}
110+
ListNode t = list2;
111+
while (t.next != null) {
112+
t = t.next;
113+
}
114+
t.next = q;
104115
p.next = list2;
105-
while (list2.next != null) {
106-
list2 = list2.next;
116+
return list1;
117+
}
118+
}
119+
```
120+
121+
### **C++**
122+
123+
```cpp
124+
/**
125+
* Definition for singly-linked list.
126+
* struct ListNode {
127+
* int val;
128+
* ListNode *next;
129+
* ListNode() : val(0), next(nullptr) {}
130+
* ListNode(int x) : val(x), next(nullptr) {}
131+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
132+
* };
133+
*/
134+
class Solution {
135+
public:
136+
ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
137+
auto p = list1, q = list1;
138+
for (int i = 0; i < a - 1; ++i) {
139+
p = p->next;
107140
}
108-
list2.next = q;
141+
for (int i = 0; i < b + 1; ++i) {
142+
q = q->next;
143+
}
144+
auto t = list2;
145+
while (t->next) {
146+
t = t->next;
147+
}
148+
t->next = q;
149+
p->next = list2;
109150
return list1;
110151
}
152+
};
153+
```
154+
155+
### **Go**
156+
157+
```go
158+
/**
159+
* Definition for singly-linked list.
160+
* type ListNode struct {
161+
* Val int
162+
* Next *ListNode
163+
* }
164+
*/
165+
func mergeInBetween(list1 *ListNode, a int, b int, list2 *ListNode) *ListNode {
166+
p, q := list1, list1
167+
for i := 0; i < a-1; i++ {
168+
p = p.Next
169+
}
170+
for i := 0; i < b+1; i++ {
171+
q = q.Next
172+
}
173+
t := list2
174+
for t.Next != nil {
175+
t = t.Next
176+
}
177+
t.Next = q
178+
p.Next = list2
179+
return list1
111180
}
112181
```
113182

solution/1600-1699/1669.Merge In Between Linked Lists/README_EN.md

Lines changed: 71 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,11 @@ class Solution:
5959
p = p.next
6060
for _ in range(b + 1):
6161
q = q.next
62+
t = list2
63+
while t.next:
64+
t = t.next
65+
t.next = q
6266
p.next = list2
63-
while list2.next:
64-
list2 = list2.next
65-
list2.next = q
6667
return list1
6768
```
6869

@@ -81,21 +82,83 @@ class Solution:
8182
*/
8283
class Solution {
8384
public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
84-
ListNode p = list1;
85+
ListNode p = list1, q = list1;
8586
for (int i = 0; i < a - 1; ++i) {
8687
p = p.next;
8788
}
88-
ListNode q = list1;
8989
for (int i = 0; i < b + 1; ++i) {
9090
q = q.next;
9191
}
92+
ListNode t = list2;
93+
while (t.next != null) {
94+
t = t.next;
95+
}
96+
t.next = q;
9297
p.next = list2;
93-
while (list2.next != null) {
94-
list2 = list2.next;
98+
return list1;
99+
}
100+
}
101+
```
102+
103+
### **C++**
104+
105+
```cpp
106+
/**
107+
* Definition for singly-linked list.
108+
* struct ListNode {
109+
* int val;
110+
* ListNode *next;
111+
* ListNode() : val(0), next(nullptr) {}
112+
* ListNode(int x) : val(x), next(nullptr) {}
113+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
114+
* };
115+
*/
116+
class Solution {
117+
public:
118+
ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
119+
auto p = list1, q = list1;
120+
for (int i = 0; i < a - 1; ++i) {
121+
p = p->next;
122+
}
123+
for (int i = 0; i < b + 1; ++i) {
124+
q = q->next;
95125
}
96-
list2.next = q;
126+
auto t = list2;
127+
while (t->next) {
128+
t = t->next;
129+
}
130+
t->next = q;
131+
p->next = list2;
97132
return list1;
98133
}
134+
};
135+
```
136+
137+
### **Go**
138+
139+
```go
140+
/**
141+
* Definition for singly-linked list.
142+
* type ListNode struct {
143+
* Val int
144+
* Next *ListNode
145+
* }
146+
*/
147+
func mergeInBetween(list1 *ListNode, a int, b int, list2 *ListNode) *ListNode {
148+
p, q := list1, list1
149+
for i := 0; i < a-1; i++ {
150+
p = p.Next
151+
}
152+
for i := 0; i < b+1; i++ {
153+
q = q.Next
154+
}
155+
t := list2
156+
for t.Next != nil {
157+
t = t.Next
158+
}
159+
t.Next = q
160+
p.Next = list2
161+
return list1
99162
}
100163
```
101164

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+
*/
11+
class Solution {
12+
public:
13+
ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
14+
auto p = list1, q = list1;
15+
for (int i = 0; i < a - 1; ++i) {
16+
p = p->next;
17+
}
18+
for (int i = 0; i < b + 1; ++i) {
19+
q = q->next;
20+
}
21+
auto t = list2;
22+
while (t->next) {
23+
t = t->next;
24+
}
25+
t->next = q;
26+
p->next = list2;
27+
return list1;
28+
}
29+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* type ListNode struct {
4+
* Val int
5+
* Next *ListNode
6+
* }
7+
*/
8+
func mergeInBetween(list1 *ListNode, a int, b int, list2 *ListNode) *ListNode {
9+
p, q := list1, list1
10+
for i := 0; i < a-1; i++ {
11+
p = p.Next
12+
}
13+
for i := 0; i < b+1; i++ {
14+
q = q.Next
15+
}
16+
t := list2
17+
for t.Next != nil {
18+
t = t.Next
19+
}
20+
t.Next = q
21+
p.Next = list2
22+
return list1
23+
}

solution/1600-1699/1669.Merge In Between Linked Lists/Solution.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,19 @@
1010
*/
1111
class Solution {
1212
public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
13-
ListNode p = list1;
13+
ListNode p = list1, q = list1;
1414
for (int i = 0; i < a - 1; ++i) {
1515
p = p.next;
1616
}
17-
ListNode q = list1;
1817
for (int i = 0; i < b + 1; ++i) {
1918
q = q.next;
2019
}
21-
p.next = list2;
22-
while (list2.next != null) {
23-
list2 = list2.next;
20+
ListNode t = list2;
21+
while (t.next != null) {
22+
t = t.next;
2423
}
25-
list2.next = q;
24+
t.next = q;
25+
p.next = list2;
2626
return list1;
2727
}
2828
}

solution/1600-1699/1669.Merge In Between Linked Lists/Solution.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ def mergeInBetween(
1212
p = p.next
1313
for _ in range(b + 1):
1414
q = q.next
15+
t = list2
16+
while t.next:
17+
t = t.next
18+
t.next = q
1519
p.next = list2
16-
while list2.next:
17-
list2 = list2.next
18-
list2.next = q
1920
return list1

0 commit comments

Comments
 (0)