Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
GreyZeng
algorithm
提交
7519eb75
A
algorithm
项目概览
GreyZeng
/
algorithm
通知
10
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7519eb75
编写于
11月 23, 2023
作者:
GreyZeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update code
上级
c543c01e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
119 addition
and
106 deletion
+119
-106
src/main/java/git/snippet/list/Code_ReverseDoubleList.java
src/main/java/git/snippet/list/Code_ReverseDoubleList.java
+0
-96
src/main/java/git/snippet/list/LeetCode_0206_ReverseLinkedList.java
...ava/git/snippet/list/LeetCode_0206_ReverseLinkedList.java
+10
-10
src/test/java/git/snippet/list/Code_ReverseDoubleListTest.java
...est/java/git/snippet/list/Code_ReverseDoubleListTest.java
+109
-0
未找到文件。
src/main/java/git/snippet/list/Code_ReverseDoubleList.java
浏览文件 @
7519eb75
package
git.snippet.list
;
import
java.util.ArrayList
;
import
java.util.List
;
// 反转双向链表
// 笔记:https://www.cnblogs.com/greyzeng/p/16629407.html
public
class
Code_ReverseDoubleList
{
...
...
@@ -23,99 +20,6 @@ public class Code_ReverseDoubleList {
return
pre
;
}
public
static
DoubleNode
testReverseDoubleList
(
DoubleNode
head
)
{
if
(
head
==
null
)
{
return
null
;
}
ArrayList
<
DoubleNode
>
list
=
new
ArrayList
<>();
while
(
head
!=
null
)
{
list
.
add
(
head
);
head
=
head
.
next
;
}
list
.
get
(
0
).
next
=
null
;
DoubleNode
pre
=
list
.
get
(
0
);
int
N
=
list
.
size
();
for
(
int
i
=
1
;
i
<
N
;
i
++)
{
DoubleNode
cur
=
list
.
get
(
i
);
cur
.
last
=
null
;
cur
.
next
=
pre
;
pre
.
last
=
cur
;
pre
=
cur
;
}
return
list
.
get
(
N
-
1
);
}
// for test
public
static
DoubleNode
generateRandomDoubleList
(
int
len
,
int
value
)
{
int
size
=
(
int
)
(
Math
.
random
()
*
(
len
+
1
));
if
(
size
==
0
)
{
return
null
;
}
size
--;
DoubleNode
head
=
new
DoubleNode
((
int
)
(
Math
.
random
()
*
(
value
+
1
)));
DoubleNode
pre
=
head
;
while
(
size
!=
0
)
{
DoubleNode
cur
=
new
DoubleNode
((
int
)
(
Math
.
random
()
*
(
value
+
1
)));
pre
.
next
=
cur
;
cur
.
last
=
pre
;
pre
=
cur
;
size
--;
}
return
head
;
}
// for test
public
static
List
<
Integer
>
getDoubleListOriginOrder
(
DoubleNode
head
)
{
List
<
Integer
>
ans
=
new
ArrayList
<>();
while
(
head
!=
null
)
{
ans
.
add
(
head
.
value
);
head
=
head
.
next
;
}
return
ans
;
}
// for test
public
static
boolean
checkDoubleListReverse
(
List
<
Integer
>
origin
,
DoubleNode
head
)
{
DoubleNode
end
=
null
;
for
(
int
i
=
origin
.
size
()
-
1
;
i
>=
0
;
i
--)
{
if
(!
origin
.
get
(
i
).
equals
(
head
.
value
))
{
return
false
;
}
end
=
head
;
head
=
head
.
next
;
}
for
(
int
i
=
0
;
i
<
origin
.
size
();
i
++)
{
if
(!
origin
.
get
(
i
).
equals
(
end
.
value
))
{
return
false
;
}
end
=
end
.
last
;
}
return
true
;
}
// for test
public
static
void
main
(
String
[]
args
)
{
int
len
=
50
;
int
value
=
100
;
int
testTime
=
100000
;
System
.
out
.
println
(
"测试开始!"
);
for
(
int
i
=
0
;
i
<
testTime
;
i
++)
{
DoubleNode
node3
=
generateRandomDoubleList
(
len
,
value
);
List
<
Integer
>
list3
=
getDoubleListOriginOrder
(
node3
);
node3
=
reverseDoubleList
(
node3
);
if
(!
checkDoubleListReverse
(
list3
,
node3
))
{
System
.
out
.
println
(
"出错了!"
);
}
DoubleNode
node4
=
generateRandomDoubleList
(
len
,
value
);
List
<
Integer
>
list4
=
getDoubleListOriginOrder
(
node4
);
node4
=
reverseDoubleList
(
node4
);
if
(!
checkDoubleListReverse
(
list4
,
node4
))
{
System
.
out
.
println
(
"出错了!"
);
}
}
System
.
out
.
println
(
"测试结束!"
);
}
public
static
class
DoubleNode
{
public
int
value
;
...
...
src/main/java/git/snippet/list/LeetCode_0206_ReverseLinkedList.java
浏览文件 @
7519eb75
...
...
@@ -7,31 +7,31 @@ package git.snippet.list;
// both?
public
class
LeetCode_0206_ReverseLinkedList
{
// 非递归版本
public
ListNode
reverseList2
(
ListNode
h
)
{
if
(
h
==
null
||
h
.
next
==
null
)
{
return
h
;
}
public
ListNode
reverseList2
(
ListNode
head
)
{
ListNode
pre
=
null
;
ListNode
cur
=
h
;
ListNode
cur
=
h
ead
;
while
(
cur
!=
null
)
{
ListNode
t
=
cur
.
next
;
ListNode
t
mp
=
cur
.
next
;
cur
.
next
=
pre
;
pre
=
cur
;
cur
=
t
;
cur
=
t
mp
;
}
return
pre
;
}
// 递归版本
// 反转head为头的链表,并把反转后的头节点返回
public
ListNode
reverseList
(
ListNode
head
)
{
return
reverse
(
head
);
}
public
ListNode
reverse
(
ListNode
head
)
{
if
(
head
==
null
||
head
.
next
==
null
)
{
return
head
;
}
ListNode
newHead
=
reverseList
(
head
.
next
);
ListNode
preHead
=
reverse
(
head
.
next
);
head
.
next
.
next
=
head
;
head
.
next
=
null
;
return
new
Head
;
return
pre
Head
;
}
public
class
ListNode
{
...
...
src/test/java/git/snippet/list/Code_ReverseDoubleListTest.java
0 → 100644
浏览文件 @
7519eb75
package
git.snippet.list
;
import
org.junit.jupiter.api.DisplayName
;
import
org.junit.jupiter.api.Test
;
import
java.util.ArrayList
;
import
java.util.List
;
import
static
git
.
snippet
.
list
.
Code_ReverseDoubleList
.
DoubleNode
;
import
static
git
.
snippet
.
list
.
Code_ReverseDoubleList
.
reverseDoubleList
;
@DisplayName
(
"反转双向链表"
)
class
Code_ReverseDoubleListTest
{
DoubleNode
testReverseDoubleList
(
DoubleNode
head
)
{
if
(
head
==
null
)
{
return
null
;
}
ArrayList
<
DoubleNode
>
list
=
new
ArrayList
<>();
while
(
head
!=
null
)
{
list
.
add
(
head
);
head
=
head
.
next
;
}
list
.
get
(
0
).
next
=
null
;
DoubleNode
pre
=
list
.
get
(
0
);
int
N
=
list
.
size
();
for
(
int
i
=
1
;
i
<
N
;
i
++)
{
DoubleNode
cur
=
list
.
get
(
i
);
cur
.
last
=
null
;
cur
.
next
=
pre
;
pre
.
last
=
cur
;
pre
=
cur
;
}
return
list
.
get
(
N
-
1
);
}
// for test
public
DoubleNode
generateRandomDoubleList
(
int
len
,
int
value
)
{
int
size
=
(
int
)
(
Math
.
random
()
*
(
len
+
1
));
if
(
size
==
0
)
{
return
null
;
}
size
--;
DoubleNode
head
=
new
DoubleNode
((
int
)
(
Math
.
random
()
*
(
value
+
1
)));
DoubleNode
pre
=
head
;
while
(
size
!=
0
)
{
DoubleNode
cur
=
new
DoubleNode
((
int
)
(
Math
.
random
()
*
(
value
+
1
)));
pre
.
next
=
cur
;
cur
.
last
=
pre
;
pre
=
cur
;
size
--;
}
return
head
;
}
// for test
public
List
<
Integer
>
getDoubleListOriginOrder
(
DoubleNode
head
)
{
List
<
Integer
>
ans
=
new
ArrayList
<>();
while
(
head
!=
null
)
{
ans
.
add
(
head
.
value
);
head
=
head
.
next
;
}
return
ans
;
}
// for test
public
boolean
checkDoubleListReverse
(
List
<
Integer
>
origin
,
DoubleNode
head
)
{
DoubleNode
end
=
null
;
for
(
int
i
=
origin
.
size
()
-
1
;
i
>=
0
;
i
--)
{
if
(!
origin
.
get
(
i
).
equals
(
head
.
value
))
{
return
false
;
}
end
=
head
;
head
=
head
.
next
;
}
for
(
int
i
=
0
;
i
<
origin
.
size
();
i
++)
{
if
(!
origin
.
get
(
i
).
equals
(
end
.
value
))
{
return
false
;
}
end
=
end
.
last
;
}
return
true
;
}
// for test
@Test
void
testDoubleList
()
{
int
len
=
50
;
int
value
=
100
;
int
testTime
=
100000
;
System
.
out
.
println
(
"测试开始!"
);
for
(
int
i
=
0
;
i
<
testTime
;
i
++)
{
DoubleNode
node3
=
generateRandomDoubleList
(
len
,
value
);
List
<
Integer
>
list3
=
getDoubleListOriginOrder
(
node3
);
node3
=
reverseDoubleList
(
node3
);
if
(!
checkDoubleListReverse
(
list3
,
node3
))
{
System
.
out
.
println
(
"出错了!"
);
}
DoubleNode
node4
=
generateRandomDoubleList
(
len
,
value
);
List
<
Integer
>
list4
=
getDoubleListOriginOrder
(
node4
);
node4
=
reverseDoubleList
(
node4
);
if
(!
checkDoubleListReverse
(
list4
,
node4
))
{
System
.
out
.
println
(
"出错了!"
);
}
}
System
.
out
.
println
(
"测试结束!"
);
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录