package main
import "fmt"
type HeroNode struct {
No int
Name string
Nickname string
NextNode * HeroNode
}
func ( this * HeroNode) AppendNode ( node * HeroNode) {
tmp := this
for {
if tmp. NextNode == nil {
break
} else {
tmp = tmp. NextNode
}
}
tmp. NextNode = node
}
func ( this * HeroNode) AppendNode2 ( node * HeroNode) {
tmp := this
for {
if tmp. NextNode == nil {
tmp. NextNode = node
break
} else {
if node. No < tmp. NextNode. No {
node. NextNode = tmp. NextNode
tmp. NextNode = node
break
} else {
tmp = tmp. NextNode
}
}
}
}
func ( this * HeroNode) Each ( ) {
if this. NextNode == nil {
fmt. Println ( "linked is empty" )
return
}
tmp := this. NextNode
for {
fmt. Printf ( "[no:%v,name:%v,nickname:%v,add:%p]\n" , tmp. No, tmp. Name, tmp. Nickname, tmp)
if tmp. NextNode == nil {
break
} else {
tmp = tmp. NextNode
}
}
}
func ( this * HeroNode) Del ( no int ) {
tmp := this
flag := false
for {
if tmp. NextNode == nil {
break
} else if tmp. NextNode. No == no {
flag = true
break
}
tmp = tmp. NextNode
}
if flag {
tmp. NextNode = tmp. NextNode. NextNode
} else {
fmt. Println ( "删除失败" )
}
}
func ( this * HeroNode) Update ( no int , node * HeroNode) {
tmp := this
flag := false
for {
if tmp. No == no {
if node. Name != "" {
tmp. Name = node. Name
}
if node. Nickname != "" {
tmp. Nickname = node. Nickname
}
flag = true
break
}
if tmp. NextNode == nil {
break
} else {
tmp = tmp. NextNode
}
}
if ! flag {
fmt. Println ( "数据不存在" )
}
}
func ( this * HeroNode) Get ( no int ) * HeroNode {
tmp := this
flag := false
for {
if tmp. No == no {
flag = true
break
}
if tmp. NextNode == nil {
break
} else {
tmp = tmp. NextNode
}
}
if ! flag {
fmt. Println ( "数据不存在" )
return nil
} else {
return tmp
}
}
func main ( ) {
head := & HeroNode{ }
gangan := & HeroNode{
No: 1 ,
Name: "gangan" ,
Nickname: "gg" ,
}
tt := & HeroNode{
No: 2 ,
Name: "tingting" ,
Nickname: "dazhuang" ,
}
head. AppendNode2 ( tt)
head. AppendNode2 ( gangan)
tt = & HeroNode{
No: 5 ,
Name: "tingting" ,
Nickname: "dazhuang" ,
}
head. AppendNode2 ( tt)
tt = & HeroNode{
No: 3 ,
Name: "tingting" ,
Nickname: "dazhuang" ,
}
head. AppendNode2 ( tt)
tt = & HeroNode{
No: 4 ,
Name: "tingting" ,
Nickname: "dazhuang" ,
}
head. AppendNode2 ( tt)
tt = & HeroNode{
No: 8 ,
Name: "tingting" ,
Nickname: "dazhuang" ,
}
head. AppendNode2 ( tt)
tt = & HeroNode{
No: 6 ,
Name: "tingting" ,
Nickname: "dazhuang" ,
}
head. AppendNode2 ( tt)
head. Update ( 4 , & HeroNode{ Nickname: "gangan-xiegai" , Name: "干干修改" } )
find := head. Get ( 4 )
fmt. Println ( find)
}
package main
import "fmt"
type HeroNode struct {
No int
Name string
Nickname string
Prev * HeroNode
Next * HeroNode
}
func ( this * HeroNode) Insert ( node * HeroNode) {
tmp := this
for {
if tmp. Next == nil {
break
}
tmp = tmp. Next
}
tmp. Next = node
node. Prev = tmp
}
func ( this * HeroNode) InsertByAsc ( node * HeroNode) {
tmp := this
for {
if tmp. Next == nil {
break
}
if tmp. Next. No > node. No{
break
} else {
tmp = tmp. Next
}
}
node. Next = tmp. Next
tmp. Next = node
node. Prev = tmp
if node. Next != nil {
node. Next. Prev = node
}
}
func ( this * HeroNode) Del ( no int ) {
flag := false
for {
if this. No == no {
this. Prev. Next = this. Next
if this. Next != nil {
this. Next. Prev = this. Prev
}
flag = true
break
}
if this. Next == nil {
break
} else {
this = this. Next
}
}
if ! flag {
fmt. Println ( "删除失败" )
}
}
func ( this * HeroNode) Each ( ) {
if this. Next == nil {
fmt. Println ( "链表为空" )
return
}
tmp := this. Next
for {
fmt. Printf ( "[no:%v,name:%v,nickname:%v,prev:%p,next:%p]\n" , tmp. No, tmp. Name, tmp. Nickname, tmp. Prev, tmp. Next)
if tmp. Next == nil {
break
}
tmp = tmp. Next
}
}
func ( this * HeroNode) EachRevers ( ) {
if this. Next == nil {
fmt. Println ( "链表为空" )
return
}
tmp := this. Next
for {
if tmp. Next == nil {
break
}
tmp = tmp. Next
}
for {
if tmp. Prev == nil {
break
}
fmt. Printf ( "[no:%v,name:%v,nickname:%v,prev:%p,next:%p]\n" , tmp. No, tmp. Name, tmp. Nickname, tmp. Prev, tmp. Next)
tmp = tmp. Prev
}
}
func main ( ) {
head := & HeroNode{ }
node1 := & HeroNode{
No: 1 ,
Name: "node1" ,
Nickname: "node1" ,
}
node2 := & HeroNode{
No: 2 ,
Name: "node2" ,
Nickname: "node2" ,
}
node3 := & HeroNode{
No: 3 ,
Name: "node3" ,
Nickname: "node3" ,
}
head. InsertByAsc ( node2)
head. InsertByAsc ( node1)
head. InsertByAsc ( node3)
head. Each ( )
fmt. Println ( "-------------------------" )
head. EachRevers ( )
}