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

标题:猜字母

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

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

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

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

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

class Dnode{ int data; char ch; Dnode next; } /*1.将19个字母,106组用循环存进数组里面,长度为2014 2.构建新链表,将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 stub
int 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单向链表是由若干个节点组成的,每个节点都包含一个数据域和一个指向下一个节点的指针域。在单向链表中,只能从头节点开始遍历链表,每个节点只能访问其后继节点。下面是用单向链表实现增删改查的代码实现: ```python # 定义单向链表节点类 class ListNode: def __init__(self, val): self.val = val self.next = None # 定义单向链表类 class LinkedList: def __init__(self): self.head = None # 添加节点 def add_node(self, val): new_node = ListNode(val) if not self.head: self.head = new_node else: curr = self.head while curr.next: curr = curr.next curr.next = new_node # 删除节点 def delete_node(self, val): if not self.head: return if self.head.val == val: self.head = self.head.next else: curr = self.head while curr.next: if curr.next.val == val: curr.next = curr.next.next return curr = curr.next # 修改节点 def update_node(self, old_val, new_val): curr = self.head while curr: if curr.val == old_val: curr.val = new_val return curr = curr.next # 查找节点 def search_node(self, val): curr = self.head while curr: if curr.val == val: return True curr = curr.next return False ``` 在上面的代码中,我们定义了一个单向链表节点类 ListNode ,包含一个数据域 val 和一个指向下一个节点的指针域 next 。然后定义了单向链表类 LinkedList ,包含一个头节点 head 。在 LinkedList 中,我们实现了 add_node() 方法用于添加节点,delete_node() 方法用于删除节点,update_node() 方法用于修改节点,search_node() 方法用于查找节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值