蓝桥杯猜字母用单向链表实现

来源:互联网 发布:复杂网络引论 pdf 编辑:程序博客网 时间:2024/06/05 05:10
标题:猜字母

把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。

接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。

得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。

答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。

/*1.用1~2014的数字来填进结点中2.循环,若结点数据时奇数就删除掉该节点3.遍历结点个数allnumber4.将剩下的结点重新从1到allnumber赋值5.循环直到链表长度为1*///结点里面既能存数字,又能存字母,字母是不变的,每个结点对应的数字可变

class Dnode{int data;char ch;Dnode next;}/*1.将19个字母,106组用循环存进数组里面,长度为20142.构建新链表,将1~2014赋给链表的每个元素3、将数组的每个字母赋给对应的结点*/class mList{String str="abcdefghijklmnopqrs";Dnode head=new Dnode();Dnode tail=head;Dnode ptr;void createList(){int j=1;while (j<=2014){ptr=new Dnode();ptr.data=j;
tail.next=ptr;ptr.next=null;tail=ptr;j++;
}int count=0;int i=0;Dnode ptr=head.next;while (i<=19){if (i==19){i=0;}if (count==2014){break;}ptr.ch=str.charAt(i);ptr=ptr.next;count ++;i ++;}}/*1.删除结点之前,先按顺序重新给结点赋数字2.遍历链表,若是奇数,就删除该节点*/void deleteList(){//int all=ergodic();//从1开始重新赋值int i=1;
Dnode myNode=head.next;while (myNode!=null){myNode.data=i;myNode=myNode.next;i++;}myNode=head;while (myNode!=null&&myNode.next!=null){if (myNode.next.data%2!=0){myNode.next=myNode.next.next;myNode=myNode.next;}}//遍历结点个数int ergodic(){Dnode myNode=head.next;int count=0;while (myNode!=null){count++;myNode=myNode.next;}return count;}void printList(){Dnode myNode=head.next;while (myNode!=null){System.out.print(myNode.ch+",");System.out.println(myNode.data+"");myNode=myNode.next;}}}public class Guess {public static void main(String[] args) {// TODO Auto-generated method stubint time=1;mList li=new mList();li.createList();System.out.println("第一次输出:");li.printList();System.out.println("第一次输出结束!");//循环删除元素,缩短链表,直到只剩下一个结点do {System.out.println("第"+time+"次输出:");li.deleteList();li.printList();time ++;if (li.ergodic()==1){System.out.println("所得的字母是"+li.head.next.ch+"");}}while (li.ergodic()!=1);}}
0 0
原创粉丝点击