Skip to content

Commit f07c53c

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

File tree

8 files changed

+288
-79
lines changed

8 files changed

+288
-79
lines changed

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

Lines changed: 100 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252

5353
直接模拟题目中的操作即可。
5454

55-
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为链表 `list1` 的长度。
55+
时间复杂度 $O(m + n)$,空间复杂度 $O(1)$。其中 $m$ 和 $n$ 分别为链表 `list1``list2` 的长度。
5656

5757
<!-- tabs:start -->
5858

@@ -73,13 +73,13 @@ class Solution:
7373
p = q = list1
7474
for _ in range(a - 1):
7575
p = p.next
76-
for _ in range(b + 1):
76+
for _ in range(b):
7777
q = q.next
78-
t = list2
79-
while t.next:
80-
t = t.next
81-
t.next = q
8278
p.next = list2
79+
while p.next:
80+
p = p.next
81+
p.next = q.next
82+
q.next = None
8383
return list1
8484
```
8585

@@ -101,18 +101,18 @@ class Solution:
101101
class Solution {
102102
public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
103103
ListNode p = list1, q = list1;
104-
for (int i = 0; i < a - 1; ++i) {
104+
while (--a > 0) {
105105
p = p.next;
106106
}
107-
for (int i = 0; i < b + 1; ++i) {
107+
while (b-- > 0) {
108108
q = q.next;
109109
}
110-
ListNode t = list2;
111-
while (t.next != null) {
112-
t = t.next;
113-
}
114-
t.next = q;
115110
p.next = list2;
111+
while (p.next != null) {
112+
p = p.next;
113+
}
114+
p.next = q.next;
115+
q.next = null;
116116
return list1;
117117
}
118118
}
@@ -135,18 +135,18 @@ class Solution {
135135
public:
136136
ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
137137
auto p = list1, q = list1;
138-
for (int i = 0; i < a - 1; ++i) {
138+
while (--a) {
139139
p = p->next;
140140
}
141-
for (int i = 0; i < b + 1; ++i) {
141+
while (b--) {
142142
q = q->next;
143143
}
144-
auto t = list2;
145-
while (t->next) {
146-
t = t->next;
147-
}
148-
t->next = q;
149144
p->next = list2;
145+
while (p->next) {
146+
p = p->next;
147+
}
148+
p->next = q->next;
149+
q->next = nullptr;
150150
return list1;
151151
}
152152
};
@@ -164,22 +164,95 @@ public:
164164
*/
165165
func mergeInBetween(list1 *ListNode, a int, b int, list2 *ListNode) *ListNode {
166166
p, q := list1, list1
167-
for i := 0; i < a-1; i++ {
167+
for ; a > 1; a-- {
168168
p = p.Next
169169
}
170-
for i := 0; i < b+1; i++ {
170+
for ; b > 0; b-- {
171171
q = q.Next
172172
}
173-
t := list2
174-
for t.Next != nil {
175-
t = t.Next
176-
}
177-
t.Next = q
178173
p.Next = list2
174+
for p.Next != nil {
175+
p = p.Next
176+
}
177+
p.Next = q.Next
178+
q.Next = nil
179179
return list1
180180
}
181181
```
182182

183+
### **TypeScript**
184+
185+
```ts
186+
/**
187+
* Definition for singly-linked list.
188+
* class ListNode {
189+
* val: number
190+
* next: ListNode | null
191+
* constructor(val?: number, next?: ListNode | null) {
192+
* this.val = (val===undefined ? 0 : val)
193+
* this.next = (next===undefined ? null : next)
194+
* }
195+
* }
196+
*/
197+
198+
function mergeInBetween(
199+
list1: ListNode | null,
200+
a: number,
201+
b: number,
202+
list2: ListNode | null,
203+
): ListNode | null {
204+
let p = list1;
205+
let q = list1;
206+
while (--a > 0) {
207+
p = p.next;
208+
}
209+
while (b-- > 0) {
210+
q = q.next;
211+
}
212+
p.next = list2;
213+
while (p.next) {
214+
p = p.next;
215+
}
216+
p.next = q.next;
217+
q.next = null;
218+
return list1;
219+
}
220+
```
221+
222+
### **C#**
223+
224+
```cs
225+
/**
226+
* Definition for singly-linked list.
227+
* public class ListNode {
228+
* public int val;
229+
* public ListNode next;
230+
* public ListNode(int val=0, ListNode next=null) {
231+
* this.val = val;
232+
* this.next = next;
233+
* }
234+
* }
235+
*/
236+
public class Solution {
237+
public ListNode MergeInBetween(ListNode list1, int a, int b, ListNode list2) {
238+
ListNode p = list1, q = list1;
239+
while (--a > 0) {
240+
p = p.next;
241+
}
242+
while (b-- > 0) {
243+
q = q.next;
244+
}
245+
p.next = list2;
246+
while (p.next != null) {
247+
p = p.next;
248+
}
249+
p.next = q.next;
250+
q.next = null;
251+
return list1;
252+
}
253+
}
254+
```
255+
183256
### **...**
184257

185258
```

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

Lines changed: 99 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ class Solution:
5757
p = q = list1
5858
for _ in range(a - 1):
5959
p = p.next
60-
for _ in range(b + 1):
60+
for _ in range(b):
6161
q = q.next
62-
t = list2
63-
while t.next:
64-
t = t.next
65-
t.next = q
6662
p.next = list2
63+
while p.next:
64+
p = p.next
65+
p.next = q.next
66+
q.next = None
6767
return list1
6868
```
6969

@@ -83,18 +83,18 @@ class Solution:
8383
class Solution {
8484
public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
8585
ListNode p = list1, q = list1;
86-
for (int i = 0; i < a - 1; ++i) {
86+
while (--a > 0) {
8787
p = p.next;
8888
}
89-
for (int i = 0; i < b + 1; ++i) {
89+
while (b-- > 0) {
9090
q = q.next;
9191
}
92-
ListNode t = list2;
93-
while (t.next != null) {
94-
t = t.next;
95-
}
96-
t.next = q;
9792
p.next = list2;
93+
while (p.next != null) {
94+
p = p.next;
95+
}
96+
p.next = q.next;
97+
q.next = null;
9898
return list1;
9999
}
100100
}
@@ -117,18 +117,18 @@ class Solution {
117117
public:
118118
ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
119119
auto p = list1, q = list1;
120-
for (int i = 0; i < a - 1; ++i) {
120+
while (--a) {
121121
p = p->next;
122122
}
123-
for (int i = 0; i < b + 1; ++i) {
123+
while (b--) {
124124
q = q->next;
125125
}
126-
auto t = list2;
127-
while (t->next) {
128-
t = t->next;
129-
}
130-
t->next = q;
131126
p->next = list2;
127+
while (p->next) {
128+
p = p->next;
129+
}
130+
p->next = q->next;
131+
q->next = nullptr;
132132
return list1;
133133
}
134134
};
@@ -146,22 +146,95 @@ public:
146146
*/
147147
func mergeInBetween(list1 *ListNode, a int, b int, list2 *ListNode) *ListNode {
148148
p, q := list1, list1
149-
for i := 0; i < a-1; i++ {
149+
for ; a > 1; a-- {
150150
p = p.Next
151151
}
152-
for i := 0; i < b+1; i++ {
152+
for ; b > 0; b-- {
153153
q = q.Next
154154
}
155-
t := list2
156-
for t.Next != nil {
157-
t = t.Next
158-
}
159-
t.Next = q
160155
p.Next = list2
156+
for p.Next != nil {
157+
p = p.Next
158+
}
159+
p.Next = q.Next
160+
q.Next = nil
161161
return list1
162162
}
163163
```
164164

165+
### **TypeScript**
166+
167+
```ts
168+
/**
169+
* Definition for singly-linked list.
170+
* class ListNode {
171+
* val: number
172+
* next: ListNode | null
173+
* constructor(val?: number, next?: ListNode | null) {
174+
* this.val = (val===undefined ? 0 : val)
175+
* this.next = (next===undefined ? null : next)
176+
* }
177+
* }
178+
*/
179+
180+
function mergeInBetween(
181+
list1: ListNode | null,
182+
a: number,
183+
b: number,
184+
list2: ListNode | null,
185+
): ListNode | null {
186+
let p = list1;
187+
let q = list1;
188+
while (--a > 0) {
189+
p = p.next;
190+
}
191+
while (b-- > 0) {
192+
q = q.next;
193+
}
194+
p.next = list2;
195+
while (p.next) {
196+
p = p.next;
197+
}
198+
p.next = q.next;
199+
q.next = null;
200+
return list1;
201+
}
202+
```
203+
204+
### **C#**
205+
206+
```cs
207+
/**
208+
* Definition for singly-linked list.
209+
* public class ListNode {
210+
* public int val;
211+
* public ListNode next;
212+
* public ListNode(int val=0, ListNode next=null) {
213+
* this.val = val;
214+
* this.next = next;
215+
* }
216+
* }
217+
*/
218+
public class Solution {
219+
public ListNode MergeInBetween(ListNode list1, int a, int b, ListNode list2) {
220+
ListNode p = list1, q = list1;
221+
while (--a > 0) {
222+
p = p.next;
223+
}
224+
while (b-- > 0) {
225+
q = q.next;
226+
}
227+
p.next = list2;
228+
while (p.next != null) {
229+
p = p.next;
230+
}
231+
p.next = q.next;
232+
q.next = null;
233+
return list1;
234+
}
235+
}
236+
```
237+
165238
### **...**
166239

167240
```

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ class Solution {
1212
public:
1313
ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
1414
auto p = list1, q = list1;
15-
for (int i = 0; i < a - 1; ++i) {
15+
while (--a) {
1616
p = p->next;
1717
}
18-
for (int i = 0; i < b + 1; ++i) {
18+
while (b--) {
1919
q = q->next;
2020
}
21-
auto t = list2;
22-
while (t->next) {
23-
t = t->next;
24-
}
25-
t->next = q;
2621
p->next = list2;
22+
while (p->next) {
23+
p = p->next;
24+
}
25+
p->next = q->next;
26+
q->next = nullptr;
2727
return list1;
2828
}
2929
};

0 commit comments

Comments
 (0)