mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
Merge pull request #2831 from markwang1992/143-reorderList
143.重排链表增加Go方法一和方法二
This commit is contained in:
@ -38,7 +38,7 @@ public:
|
|||||||
cur = head;
|
cur = head;
|
||||||
int i = 1;
|
int i = 1;
|
||||||
int j = vec.size() - 1; // i j为之前前后的双指针
|
int j = vec.size() - 1; // i j为之前前后的双指针
|
||||||
int count = 0; // 计数,偶数去后面,奇数取前面
|
int count = 0; // 计数,偶数取后面,奇数取前面
|
||||||
while (i <= j) {
|
while (i <= j) {
|
||||||
if (count % 2 == 0) {
|
if (count % 2 == 0) {
|
||||||
cur->next = vec[j];
|
cur->next = vec[j];
|
||||||
@ -73,7 +73,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
cur = head;
|
cur = head;
|
||||||
int count = 0; // 计数,偶数去后面,奇数取前面
|
int count = 0; // 计数,偶数取后面,奇数取前面
|
||||||
ListNode* node;
|
ListNode* node;
|
||||||
while(que.size()) {
|
while(que.size()) {
|
||||||
if (count % 2 == 0) {
|
if (count % 2 == 0) {
|
||||||
@ -338,8 +338,85 @@ class Solution:
|
|||||||
return pre
|
return pre
|
||||||
```
|
```
|
||||||
### Go
|
### Go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
# 方法三 分割链表
|
// 方法一 数组模拟
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* type ListNode struct {
|
||||||
|
* Val int
|
||||||
|
* Next *ListNode
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
func reorderList(head *ListNode) {
|
||||||
|
vec := make([]*ListNode, 0)
|
||||||
|
cur := head
|
||||||
|
if cur == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for cur != nil {
|
||||||
|
vec = append(vec, cur)
|
||||||
|
cur = cur.Next
|
||||||
|
}
|
||||||
|
cur = head
|
||||||
|
i := 1
|
||||||
|
j := len(vec) - 1 // i j为前后的双指针
|
||||||
|
count := 0 // 计数,偶数取后面,奇数取前面
|
||||||
|
for i <= j {
|
||||||
|
if count % 2 == 0 {
|
||||||
|
cur.Next = vec[j]
|
||||||
|
j--
|
||||||
|
} else {
|
||||||
|
cur.Next = vec[i]
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
cur = cur.Next
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
cur.Next = nil // 注意结尾
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```go
|
||||||
|
// 方法二 双向队列模拟
|
||||||
|
/**
|
||||||
|
* Definition for singly-linked list.
|
||||||
|
* type ListNode struct {
|
||||||
|
* Val int
|
||||||
|
* Next *ListNode
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
func reorderList(head *ListNode) {
|
||||||
|
que := make([]*ListNode, 0)
|
||||||
|
cur := head
|
||||||
|
if cur == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for cur.Next != nil {
|
||||||
|
que = append(que, cur.Next)
|
||||||
|
cur = cur.Next
|
||||||
|
}
|
||||||
|
|
||||||
|
cur = head
|
||||||
|
count := 0 // 计数,偶数取后面,奇数取前面
|
||||||
|
for len(que) > 0 {
|
||||||
|
if count % 2 == 0 {
|
||||||
|
cur.Next = que[len(que)-1]
|
||||||
|
que = que[:len(que)-1]
|
||||||
|
} else {
|
||||||
|
cur.Next = que[0]
|
||||||
|
que = que[1:]
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
cur = cur.Next
|
||||||
|
}
|
||||||
|
cur.Next = nil // 注意结尾
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```go
|
||||||
|
// 方法三 分割链表
|
||||||
func reorderList(head *ListNode) {
|
func reorderList(head *ListNode) {
|
||||||
var slow=head
|
var slow=head
|
||||||
var fast=head
|
var fast=head
|
||||||
|
Reference in New Issue
Block a user