免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2811 | 回复: 3

java循环链表 [复制链接]

论坛徽章:
0
发表于 2010-11-16 14:53 |显示全部楼层
  1. package com.zrp.link;
  2. /**
  3. * 节点类
  4. * @author zrp
  5. *
  6. */
  7. class Node{
  8. public Node(){}
  9. public  int data;   //结点数据
  10. public Node next;   //指向下一结点的指针
  11. Node(int data){
  12.   this.data = data;
  13. }
  14. /**
  15.   * 获取节点数据
  16.   * @param null
  17.   * @return int
  18.   */
  19.    public int getNodeData(){
  20.     return this.data;
  21.    }
  22. }

  23. /**
  24. * 报数链表类
  25. * @author zrp
  26. *
  27. */
  28. public class NumberOffLink {
  29. public Node headNode; //头结点
  30. private int size;     //链表长度
  31. public int getSize() {
  32.   return size;
  33. }
  34. public void setSize(int size) {
  35.   this.size = size;
  36. }

  37. /**
  38.   * 构造函数,无参构造函数
  39.   * @param n,node
  40.   */
  41. public NumberOffLink(){  
  42. }
  43. /**
  44.   * 有参构造函数,创建链表
  45.   * @param 人数account
  46.   */

  47.    public NumberOffLink(int nodeCount){
  48.     if(nodeCount>=1){
  49.      headNode = new Node(1);        //新建结点
  50.      Node p = headNode;
  51.      headNode.next = null;
  52.      for(int i=2;i<nodeCount;i++){
  53.       Node node = new Node(i);
  54.       p.next = node;
  55.       node=p;
  56.      }
  57.      
  58.      this.size = nodeCount;
  59.     }
  60.     else{
  61.      System.out.println("输入的人数有误!");
  62.     }         
  63.    }
  64.    
  65.    /**
  66.     * 创建链表函数
  67.     */
  68.    public Node creatLink(int nodeCount){
  69.     Node p;
  70.     if(nodeCount>=1){
  71.      Node head = new Node(1);        //新建结点
  72.       p = head;
  73.      for(int i=2;i<=nodeCount;i++){
  74.       Node node = new Node(i);
  75.       p.next = node;
  76.       p=node;
  77.      }     
  78.      this.size = nodeCount;   
  79.      p.next = head;     //把链表变成循环链表
  80.      return head;
  81.     }
  82.     else{
  83.      System.out.println("输入的人数有误!");
  84.      return null;
  85.     }
  86.    
  87.    }
  88.    
  89.    /**
  90.     * @param numberOffObj
  91.     * @return 返回报数后的表头结点
  92.     */
  93.    public Node NumberOffMethod(Node head){
  94.    int currSize = this.getSize();
  95.    Node currNode = head;
  96.    Node tempNode=null;
  97.    Node tempMyHead = null;
  98.    Node delPreNode = null;
  99.    int tempSize = currSize;
  100.       for(int i=1;i<this.getSize();i++){  //趟数,每一次随着size的变化而不同
  101.        while(true){   //找出最后一个能被3整除的数
  102.         if(tempSize%3==0){
  103.          break;      
  104.         }
  105.         tempSize--;
  106.        }
  107.      for(int j=1;j<=tempSize;j++){
  108.       if(j%3==0){
  109.        delPreNode.next = currNode.next;
  110.        System.out.println(currNode.data);
  111.        tempNode=currNode;     
  112.        currNode = delPreNode;
  113.        this.size--;
  114.        //tempSize = j;
  115.       }
  116.       delPreNode = currNode;
  117.        currNode = currNode.next;
  118.      }//内循环      
  119.       }//外循环
  120.       while(this.size!=0){                     
  121.       System.out.println(currNode.data); //打印剩余的数据
  122.       delPreNode = currNode;
  123.       delPreNode.next = currNode.next;
  124.       currNode = delPreNode;
  125.        currNode = currNode.next;
  126.          this.size--;
  127.     }
  128.       return tempNode;
  129.       
  130.    }
  131.    /**
  132.     * 判断链表是否为空
  133.     */
  134.    private boolean isLinkEmpty(Node head){
  135.     if(head == null){
  136.      return true;
  137.     }
  138.     else{
  139.      return false;
  140.     }
  141.    }
  142.    
  143. /**
  144.   * 测试函数
  145.   * @param args
  146.   */
  147.    public static void main(String[] args) {
  148.     NumberOffLink link = new NumberOffLink();
  149.     Node head = link.creatLink(12);
  150.     Node tempH = link.NumberOffMethod(head);   
  151. }
  152. }
复制代码

论坛徽章:
0
发表于 2010-11-18 09:06 |显示全部楼层
好东西

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2010-11-24 10:19 |显示全部楼层
还没有使用过链表,有空学习。

论坛徽章:
0
发表于 2010-11-25 09:14 |显示全部楼层
呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP