Skip to content

Commit 5f3d6be

Browse files
Merge pull request #2831 from markwang1992/143-reorderList
143.重排链表增加Go方法一和方法二
2 parents 281ff3e + 50472c3 commit 5f3d6be

File tree

1 file changed

+80
-3
lines changed

1 file changed

+80
-3
lines changed

problems/0143.重排链表.md

Lines changed: 80 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public:
3838
cur = head;
3939
int i = 1;
4040
int j = vec.size() - 1; // i j为之前前后的双指针
41-
int count = 0; // 计数,偶数去后面,奇数取前面
41+
int count = 0; // 计数,偶数取后面,奇数取前面
4242
while (i <= j) {
4343
if (count % 2 == 0) {
4444
cur->next = vec[j];
@@ -73,7 +73,7 @@ public:
7373
}
7474
7575
cur = head;
76-
int count = 0; // 计数,偶数去后面,奇数取前面
76+
int count = 0; // 计数,偶数取后面,奇数取前面
7777
ListNode* node;
7878
while(que.size()) {
7979
if (count % 2 == 0) {
@@ -338,8 +338,85 @@ class Solution:
338338
return pre
339339
```
340340
### Go
341+
342+
```go
343+
// 方法一 数组模拟
344+
/**
345+
* Definition for singly-linked list.
346+
* type ListNode struct {
347+
* Val int
348+
* Next *ListNode
349+
* }
350+
*/
351+
func reorderList(head *ListNode) {
352+
vec := make([]*ListNode, 0)
353+
cur := head
354+
if cur == nil {
355+
return
356+
}
357+
for cur != nil {
358+
vec = append(vec, cur)
359+
cur = cur.Next
360+
}
361+
cur = head
362+
i := 1
363+
j := len(vec) - 1 // i j为前后的双指针
364+
count := 0 // 计数,偶数取后面,奇数取前面
365+
for i <= j {
366+
if count % 2 == 0 {
367+
cur.Next = vec[j]
368+
j--
369+
} else {
370+
cur.Next = vec[i]
371+
i++
372+
}
373+
cur = cur.Next
374+
count++
375+
}
376+
cur.Next = nil // 注意结尾
377+
}
378+
```
379+
380+
```go
381+
// 方法二 双向队列模拟
382+
/**
383+
* Definition for singly-linked list.
384+
* type ListNode struct {
385+
* Val int
386+
* Next *ListNode
387+
* }
388+
*/
389+
func reorderList(head *ListNode) {
390+
que := make([]*ListNode, 0)
391+
cur := head
392+
if cur == nil {
393+
return
394+
}
395+
396+
for cur.Next != nil {
397+
que = append(que, cur.Next)
398+
cur = cur.Next
399+
}
400+
401+
cur = head
402+
count := 0 // 计数,偶数取后面,奇数取前面
403+
for len(que) > 0 {
404+
if count % 2 == 0 {
405+
cur.Next = que[len(que)-1]
406+
que = que[:len(que)-1]
407+
} else {
408+
cur.Next = que[0]
409+
que = que[1:]
410+
}
411+
count++
412+
cur = cur.Next
413+
}
414+
cur.Next = nil // 注意结尾
415+
}
416+
```
417+
341418
```go
342-
# 方法三 分割链表
419+
// 方法三 分割链表
343420
func reorderList(head *ListNode) {
344421
var slow=head
345422
var fast=head

0 commit comments

Comments
 (0)