package main
import (
"fmt"
)
type Data string
type dualNode struct {
prior *dualNode //前驱指针
data Data
next *dualNode //后继指针
}
//建立A-Z的双向循环链表
func createList()*dualNode{
phead:=new(dualNode) //头结点
phead.data="A"
phead.prior=nil
phead.next=nil
q:=phead
for i:=1;i<26;i++{
pnew:=new(dualNode)
pnew.data=(Data)(string(65+i))
pnew.prior=q
pnew.next=q.next
q.next=pnew
q=pnew
}
q.next=phead
phead.prior=q
return q //返回尾结点
}
func isempty(list *dualNode)bool {
if list.next==nil || list.next==list {
return true
}
return false
}
func traverse(list *dualNode){
if isempty(list) {
return
}
p:=list.next;
for p!=list{
fmt.Printf("%3s",p.data)
p=p.next
}
fmt.Printf("%3s\n",list.data)
}
//排列链表,其实就是把val%26作为尾指针返回
func lineUp(list **dualNode,val int){
p:=*list
if val<=0 {
for i:=val%26;i<0;i++{
p=p.prior
}
}else {
for i:=val%26;i>0;i--{
p=p.next
}
}
*list=p
}
func main() {
list:=createList()
var n int
traverse(list)
fmt.Println("请输入一个整数:")
fmt.Scanf("%d",&n)
lineUp(&list,n)
traverse(list)
}