Skip to content

Commit 449a1de

Browse files
author
baxiang
committed
20200519
1 parent fb4db96 commit 449a1de

File tree

3 files changed

+171
-33
lines changed

3 files changed

+171
-33
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
type ListNode struct {
8+
Val int
9+
Next *ListNode
10+
}
11+
12+
func isPalindrome1(head *ListNode) bool {
13+
var str string
14+
var revertStr string
15+
for head != nil {
16+
str = fmt.Sprintf("%s%d", str, head.Val)
17+
revertStr = fmt.Sprintf("%d%s", head.Val, revertStr)
18+
head = head.Next
19+
}
20+
return str == revertStr
21+
}
22+
23+
func isPalindrome(head *ListNode) bool {
24+
if head==nil{
25+
return true
26+
}
27+
// 查找中间节点
28+
midNode := findMidNode(head)
29+
// 翻转以中间节点的链表
30+
currTail := revertLinkedNode(midNode)
31+
// 判断头节点和尾节点值是否一直
32+
for head!=nil&&currTail!=nil{
33+
if head.Val!=currTail.Val{
34+
return false
35+
}
36+
head= head.Next
37+
currTail = currTail.Next
38+
}
39+
return true
40+
}
41+
42+
func isPalindrome1(head *ListNode) bool {
43+
if head==nil{
44+
return true
45+
}
46+
var res []
47+
for head!=nil{
48+
49+
}
50+
return true
51+
}
52+
53+
54+
55+
func findMidNode(head *ListNode)*ListNode{
56+
57+
slow := head
58+
fast := head.Next
59+
for fast!=nil&&fast.Next!=nil{
60+
slow = slow.Next
61+
fast = fast.Next.Next
62+
}
63+
return slow
64+
}
65+
66+
67+
func revertLinkedNode(head *ListNode) *ListNode {
68+
dummyHead := &ListNode{}
69+
for head != nil {
70+
next := head.Next
71+
proNode := dummyHead.Next
72+
dummyHead.Next = head
73+
head.Next = proNode
74+
head = next
75+
}
76+
return dummyHead.Next
77+
}
78+
79+
80+
func revertLinkedNode1(head *ListNode) *ListNode {
81+
if head==nil||head.Next==nil{
82+
return head
83+
}
84+
next :=head.Next
85+
node := revertLinkedNode1(next)
86+
next.Next = head
87+
head.Next = nil
88+
return node
89+
}
90+
91+
func main() {
92+
t1 := ListNode{Val: 1}
93+
t2 := ListNode{Val: 2}
94+
t1.Next = &t2
95+
t3 := ListNode{Val: 1}
96+
t2.Next = &t3
97+
t4 := ListNode{Val: 4}
98+
t3.Next = &t4
99+
t5 := ListNode{Val: 5}
100+
t4.Next = &t5
101+
102+
103+
104+
105+
fmt.Println(isPalindrome(&t1))
106+
107+
108+
}

226invert-binary-tree/main.go

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ type TreeNode struct {
99
}
1010

1111

12-
func invertTree(root *TreeNode) *TreeNode {
12+
func invertTree3(root *TreeNode) *TreeNode {
1313
if root==nil {// 递归结束条件
1414
return nil
1515
}
16-
right:= invertTree(root.Right)// 返回已经翻转的右节点
17-
left := invertTree(root.Left) // 返回已经翻转的左节点
16+
right:= invertTree3(root.Right)// 返回已经翻转的右节点
17+
left := invertTree3(root.Left) // 返回已经翻转的左节点
1818
// 当前需要一级需要做的是把 左节点指向已经翻转的右节点 右节点指向已经翻转的左节点
1919
root.Left = right
2020
root.Right = left
@@ -30,33 +30,33 @@ func invertTree1(root *TreeNode) *TreeNode {
3030
root.Left = root.Right
3131
root.Right = temp
3232

33-
invertTree(root.Left) // 翻转的左节点
34-
invertTree(root.Right)// 返翻转的右节点
33+
invertTree1(root.Left) // 翻转的左节点
34+
invertTree1(root.Right)// 返翻转的右节点
3535

3636
return root
3737
}
3838

39-
func invertTree2(root *TreeNode) *TreeNode {
40-
if root==nil {
41-
return nil
42-
}
43-
l := make([]*TreeNode,0)
44-
l = append(l ,root)
45-
for len(l)>0{
46-
curr := l[0]
47-
l = l[1:]
48-
left :=curr.Left
49-
right :=curr.Right
50-
curr.Right = left
51-
curr.Left = right
52-
if curr.Left!=nil {
53-
l = append(l,curr.Left)
54-
}
55-
if curr.Right!=nil {
56-
l = append(l,curr.Right)
57-
}
58-
}
59-
return root
39+
40+
func invertTree(root *TreeNode) *TreeNode {
41+
if root==nil{
42+
return root
43+
}
44+
queue :=[]*TreeNode{root}
45+
for len(queue)>0{
46+
size :=len(queue)
47+
for i:=0;i<size;i++{
48+
node := queue[i]
49+
node.Left,node.Right = node.Right,node.Left
50+
if node.Left!=nil{
51+
queue = append(queue,node.Left)
52+
}
53+
if node.Right!=nil{
54+
queue = append(queue,node.Right)
55+
}
56+
}
57+
queue =queue[size:]
58+
}
59+
return root
6060
}
6161

6262

@@ -80,25 +80,25 @@ func main() {
8080
Val: 3,
8181
}
8282
b.Right = e
83-
f := &TreeNode{
84-
Val: 6,
85-
}
86-
c.Left = f
83+
//f := &TreeNode{
84+
// Val: 6,
85+
//}
86+
//c.Left = f
8787
g := &TreeNode{
8888
Val: 9,
8989
}
9090
c.Right = g
9191
// 9 7 64 3 2 1
92-
invertTree2(a)
93-
printOrder(a)
92+
r :=invertTree(a)
93+
printOrder(r)
9494
}
9595

9696
func printOrder(root *TreeNode){
9797
if root== nil {
9898
return
9999
}
100-
printOrder(root.Left)
101100
fmt.Println(root.Val)
101+
printOrder(root.Left)
102102
printOrder(root.Right)
103103
return
104104
}

86partition-list/main.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package main
2+
3+
type ListNode struct {
4+
Val int
5+
Next *ListNode
6+
}
7+
8+
func partition(head *ListNode, x int) *ListNode {
9+
greatDummy := &ListNode{}
10+
lessDummy := &ListNode{}
11+
currGreat := greatDummy
12+
currLess := lessDummy
13+
for head != nil {
14+
if head.Val < x {
15+
currLess.Next = head
16+
currLess = head
17+
} else {
18+
currGreat.Next = head
19+
currGreat = head
20+
}
21+
head = head.Next
22+
}
23+
currGreat.Next = nil
24+
currLess.Next = greatDummy.Next
25+
return lessDummy.Next
26+
}
27+
28+
func main() {
29+
30+
}

0 commit comments

Comments
 (0)