题目描述:
题目分析:
该题就是从1开始到13,从头结点开始,然后每到一个数,从当前位置开始为0,开始数到当前数,并且当前位置就为该牌。
解题步骤:
1.定义内部类结点,结点数据域内存储牌的点数
2.创建13个结点空间的单项循环链表
3.利用for循环将点数依次放入相应位置
4.最后输出该牌的顺序
完整代码:
package Ds02.动态链表;
public class MagicPoker {
private Node head;
private Node rear;
private int size;
public MagicPoker(){
//创建一个新的里面没有数据的单项循环链表,由一系列结点组成
head=new Node();//先创建一个头结点,然后根据头结点创建一系列结点
rear=head;
rear.next=head;
for(int i=2;i<=13;i++){
Node n=new Node();
n.next=rear.next;
rear.next=n;
rear=rear.next;
}
size=13;
}
public void showPoker(){
Node virtulHead=new Node();//创建的为虚拟头结点
virtulHead.next=head;//虚拟头结点后面为真实头结点
Node p=virtulHead;
for(int i=1;i<=13;i++){//点数的循环
for(int j=0;j<i;){
if(p.next.number==0){
p=p.next;
j++;
}else{
p=p.next;
}
}
p.number=i;
}
p=virtulHead;
for(int i=1;i<=13;i++){
p=p.next;
System.out.println(p.number+" ");
}
}
private class Node{
int number;
Node next;
public Node(){ }
public Node(int number,Node next){
this.number=number;
this.next=next;
}
}
}