用面向对象的思维去解决数三退一。关键字,双向环形链表。

来源:互联网 发布:潭州学院java视频下载 编辑:程序博客网 时间:2024/05/16 14:21
//建立独立的结点class Node{int id;    //节点编号Node left; //左节点Node right;//右节点}//设定环形链表的体量class NodeCircle{int count = 0;//计数器归零Node first;//头节点Node last;//尾节点        //创建构造函数接口,以便建立需要的链表体量NodeCircle(int count){for(int i = 0; i < count; i++){add();//添加链表节点的方法}}        //添加节点方法的定义void add(){Node node = new Node();//java区分大小写node.id = count;if (count == 0){//判断当前是否是在创建头节点first = node;//当创建头节点时,设计的头节点是被创建者自身last = node;//当创建头节点时,设计的尾节点是被创建者自身node.left = node;//被创建的节点,左侧赋值是自身node.right = node;//被创建的节点,右侧赋值是自身}else{                        //默认添加节点在尾端                       last.right = node; //添加节点的思路,可以套用国家间的外交,即,双向双方互认node.left = last;node.right = first;first.left = node;last = node;}count++;}void remove(Node node){if (count == 0){System.out.println("当前链表无记录,删除操作不可执行");}else if ( count == 1){first = last = null;System.out.println("当前链表记录唯一,删除后清空");}else{node.left.right = node.right;node.right.left = node.left;if (node == first){first = node.right;}else if (node == last){last = node.left;}}count--;}}public class DoublyLinked {public static void main(String[] args) {NodeCircle nc = new NodeCircle(500);int countNum = 0;Node nod = nc.first;while (nc.count > 1){countNum++;if (countNum == 3){countNum = 0;nc.remove(nod);}nod = nod.right;}System.out.println(nc.first.id+1);}}
关键技术点已经在注释中标明
0 0
原创粉丝点击