package main
import (
"fmt"
"os"
)
type Node struct {
val int
pNode *Node
}
func create_list() (*Node) {
var (
len int
val int
)
var pHead *Node
pTmp:=new(Node)
pTmp.pNode=nil
pHead=pTmp
if pHead==nil {
fmt.Println("分配内存出错,程序退出")
os.Exit(-1)
}
fmt.Println("请输入要生成链表节点个数:len=")
fmt.Scanf("%d",&len)
for i:=0;i<len;i++ {
fmt.Printf("请输入第%d个节点的值:",i+1)
fmt.Scanf("%d",&val)
pNew:=new(Node)
if pNew==nil {
fmt.Println("分配内存失败,程序退出")
os.Exit(-1)
}
pNew.val=val
pNew.pNode=nil
pTmp.pNode=pNew
pTmp=pNew
}
return pHead
}
func traverse_list(pHead *Node) {
p:=pHead.pNode
if p==nil {
return
}
for {
fmt.Printf("%d ",p.val)
p=p.pNode
if p==nil{
break
}
}
fmt.Println()
}
func isempty_list(pHead *Node) bool {
if pHead.pNode==nil {
return true
}
return false
}
func length_list(pHead *Node) int {
var len int=0
p:=pHead.pNode
for p!=nil {
len++
p=p.pNode
}
return len
}
func sort_list(pHead *Node) {
len:=length_list(pHead)
pLeft:=pHead.pNode
for i:=0;i<len-1;i++{
pRight:=pLeft.pNode
for j:=i+1;j<len;j++{
if pLeft.val>pRight.val {
tmp:=pLeft.val
pLeft.val=pRight.val
pRight.val=tmp
}
pRight=pRight.pNode
}
pLeft=pLeft.pNode
}
}
func insert_list(pHead *Node,pos,val int) bool {
p:=pHead
var i int=0
for ;i<pos-1;i++{
p=p.pNode
if p==nil {
break
}
}
if i>pos-1 || p==nil {
return false
}
pNew:=new(Node)
pNew.val=val
if pNew==nil {
fmt.Println("分配内存出错,程序退出")
os.Exit(-1)
}
ptmp:=p.pNode
p.pNode=pNew
pNew.pNode=ptmp
return true
}
func delete_list(pHead *Node,pos int)(bool,int) {
p:=pHead
var i int=0
for ;i<pos-1;i++{
p=p.pNode
if p.pNode==nil {
break
}
}
if i>pos-1 || p.pNode==nil {
return false,0
}
reVal:=p.pNode.val
p.pNode=p.pNode.pNode
return true,reVal
}
func main() {
pHead:=create_list()
traverse_list(pHead)
//if isempty_list(pHead) {
// fmt.Println("链表为空!")
//}else {
// fmt.Println("链表不为空!")
//}
//fmt.Println("链表长度为:",length_list(pHead))
//sort_list(pHead)
//insert_list(pHead,4,33)
pos:=4
rebool,reval:=delete_list(pHead,pos)
if rebool {
fmt.Printf("删除第%d个节点成功,删除的节点值为:%d\n",pos,reval)
}else {
fmt.Printf("删除节点失败")
}
traverse_list(pHead)
}