`
wx13212365
  • 浏览: 18839 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

用java实现的一个链表

阅读更多
随手写的一个用java实现的链表。
package JavaHash;
/**
* 这个类定义了链表中应有的属性和获取方法
* @author zyn
*
*/
public class Node {
    private Node left;
    private Node right;
    private Object obj;
    private int flag;
    public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public Node(Object obj){
    this.obj=obj;
    }
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
   
   
}
package JavaHash;
/**
* 建一个双向链表
* @author zyn
* 这个链表有一个致命性漏洞,当存入的数据是整形是,你搜索和删除只能用确定链表中位置的方式
* 因此此链表十分适合向其中加入不是整型的数据。
*/
public class JavaLinkList {
private Node first;//建立头结点
private Node last;
private Node move=null;
/**
* 初始化链表
*/
   public void creatLinkList(){
   first=new Node("head");
   last=new Node("last");
   first.setRight(last);
   first.setLeft(null);
   last.setRight(null);
   last.setLeft(first);
   last.setFlag(1);
   first.setFlag(0);
   move=first;
 
   }
   /**
    * 当建一个 JavaLinkList的对象时自动调用初始化方法
    */
   public JavaLinkList(){
   creatLinkList();
   }
   /**
    * 检查链表中是否有相同的数据
    * @param obj 数据
    * @return
    */
   public boolean check(Object obj){
   boolean b=true;
   int i=last.getFlag();
   for(int t=0;t<=i;t++){
   Node no=getLink(i);
   if(no.getObj().equals(obj)){
   b=false;
   }
   no=null;
   }
   return b;
   }
   /**
    * 向链表中加入元素
    * @param obj 要加入的元素
    * @return 加入元素在链表中的位置
    */
   public int add(Object obj){
   if(check(obj)){
   Node no=new Node(obj);
   move.setRight(no);
   no.setLeft(move);
   no.setRight(last);
   last.setLeft(no);
   no.setFlag(move.getFlag()+1);
   last.setFlag(move.getFlag()+2);
   move=no;
           no=null;
   }
   return move.getFlag();
 
   }
   /**
    * 删除链表中对应标记的元素
    * @param i
    */
   public boolean delete(int i){
   Node no=getLink(i);
   Node aim=no;
   boolean b=true;
   for(int j=no.getFlag()+1;j<=last.getFlag();j++){
   Node no2=getLink(j);
   no2.setFlag(no2.getFlag()-1);
   no2=null;
   }
   if(no.getLeft()!=null&&no.getRight()!=null){
   no.getLeft().setRight(no.getRight());
   no.getRight().setLeft(no.getLeft());
   no.setLeft(null);
   no.setRight(null);
   no=null;
   }else{
   b=false;
   no=null;
   }
  return b;
   }
   /**
    * 根据所存元素删除链表节点
    * @param obj 存的元素
    *
    */
   public boolean delete(Object obj){
   Node no=getLink(obj);
   Node aim=no;
   boolean b=true;
   int t=no.getFlag();
   for(int i=t+1;i<=last.getFlag();i++){
   Node no2=getLink(i);
   no2.setFlag(no.getFlag()-1);
   no2=null;
   }
   if(no.getLeft()!=null&&no.getRight()!=null){
   no.getLeft().setRight(no.getRight());
   no.getRight().setLeft(no.getLeft());
   no.setLeft(null);
   no.setRight(null);
   no=null;
   }else{
   b=false;
   }
  
   return b;
   }
  
   /**
    * 寻找链表中的元素
    * @param i 链表位置标记
    * @return 返回要寻找的链表对象
    */
   public Node getLink(int i){
   Node aim=new Node("mubiao");
   if(i>0){
   Node find=first.getRight();
   if(find.getFlag()==i){
   aim=find;
}else{
for(int j=2;j<=last.getFlag();j++){
Node no=find.getRight();
if(no.getFlag()==i){
   aim=no;
   break;
}else{
find=no;
}
no=null;
}

}
   }else{
  aim=first;
   }
   return aim;
   }
   /**
    * 根据所村内容找
    * @param obj 存的内容
    * @return 返回节点对象
    */
   public Node getLink(Object obj){
   Node aim=null;
   for(int i=0;i<=last.getFlag();i++){
   Node no=getLink(i);
   if(no.getObj()==obj){
   aim=getLink(i);
   }
   no=null;
   }
   return aim;
   }
   /**
    * 向链表中的指定位置加入新的节点。
    * @param i节点位置
    * @param obj 要加入的数据
    */
   public boolean insert(int i,Object obj){
  
   boolean b=true;
   Node no=getLink(i);
       if(no.getLeft()!=null){
       for(int j=i+1;j<=last.getFlag();j++){
       Node no2=getLink(j);
       no2.setFlag(no2.getFlag()+1);
       no2=null;
       }
       no.setFlag(no.getFlag()+1);
       Node fresh=new Node(obj);
       fresh.setLeft(no.getLeft());
       fresh.setRight(no);
       no.getLeft().setRight(fresh);
       no.setLeft(fresh);
       fresh.setFlag(i);
       no=null;
       fresh=null;

   }else{
   b=false;
   no=null;
   }
   return b;
   }
   /**
    *
    * @return 得到链表中有多少元素
    */
   public int length(){
   return last.getFlag()+1;
   }
  
  
}
分享到:
评论

相关推荐

    java实现链表操作

    用java实现了数据结构中的链表,作为新手学习数据结构和java的资料。

    Java实现循环链表

    用Java定义一个循环链表,实现链表的基本操作: 初始化*、获取头结点、添加新元素*、删除链表元素 、获取链表元素*、查找链表元素*、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空...

    java实现的动态链表

    在Java中,除了手动实现链表外,还可以使用内置的`LinkedList`类,它是Java集合框架的一部分,提供了丰富的操作方法。然而,手动实现链表可以帮助我们更好地理解数据结构和算法,这对于软件开发人员来说是非常有价值...

    java 实现倒序链表

    接下来,我们需要编写一个方法来实现链表的倒序。该方法接收链表的头结点作为参数,并返回倒序后的新的头结点。实现的逻辑大致分为以下几个步骤: 1. 初始化三个指针:`p`、`q`和`head`。 2. 使用循环逐个反转节点的...

    JAVA实现链表_双向链表

    JAVA实现链表_双向链表

    java 单链表和双向链表的实现

    在Java中,我们可以创建一个表示链表节点的类,通常称为`Node`,包含数据字段和指向下一个节点的引用。然后,创建一个`LinkedList`类,包含头节点并提供所需操作的方法。例如,要在头部添加节点,可以创建新节点并将...

    用java实现双向链表操作

    用java实现双向链表的完整操作,主要用到内部类实现。

    用链表实现线性表java

    在Java编程语言中,线性表是一种常见的数据结构,它包含了一组有序的元素集合。...通过`ChainList.java`和`ListInterface.java`,我们可以学习如何在Java中构建一个功能完备的链表结构,并了解其在实际应用中的价值。

    Java SE程序 类实现单向链表

    Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现...

    Java实现双向链表

    用Java定义一个双向链表,实现链表的基本操作: 初始化、获取头结点、添加新元素、删除链表元素、 获取链表元素、查找链表元素、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空链表。

    java编写的循环链表来实现约瑟夫环

    循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释

    链表用java实现,弥补java的无指针的缺点

    虽然Java没有像C或C++那样的指针,但是通过对象引用,我们完全可以在Java中实现链表数据结构。这种实现方式不仅安全,而且易于理解和操作。通过链表,我们可以高效地处理动态数据集,执行插入、删除等操作,而无需...

    java 数据结构 链表

    Java API中提供了一个名为`LinkedList`的内置类,它是`List`接口的一个实现,支持链表操作。`LinkedList`提供了丰富的API,如`add()`, `remove()`, `get()`, `indexOf()`等,便于开发者在链表上进行操作。 在实际...

    Java 单向链表 插入与删除节点

    这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。

    Java算法(链表操作实例)

    例如,要在链表头部插入一个节点,可以这样实现: ```java public void insertAtHead(int val) { ListNode newNode = new ListNode(val); newNode.next = head; head = newNode; } ``` 这里的`head`是链表的头...

    Java实现的循环链表源码

    由于在项目中需要用到循环链表,然而在JDK没有其实现,所以用Java语言实现了循环链表,供大家学习和参考。若有任何问题请发送E-Mail:wn_lut@126.com,以交流及改进。 Package:com.utilities.structs 打开方式:...

    java实现的单向链表和双向链表

    双向链表的每个节点除了包含数据和指向下一个节点的引用外,还有一个指向前一个节点的引用。这使得双向链表可以向前或向后遍历。我们修改`Node`类以适应双向链表: ```java public class Node { int data; Node ...

    异质链表的java实现

    以上就是异质链表的Java实现,以及如何在四个公司类中实现增删改功能的基本思路。实际编程时,还需要考虑异常处理、性能优化和代码可读性等因素。在处理异质链表时,要特别注意多态性的运用,以及在不同节点类型间...

    多项式相加 java链表实现

    2. 创建`LinkedList`类,表示多项式链表,并实现链表的基本操作。 3. 实现`insertA`方法,将一个多项式插入到另一个多项式中,保持指数非降序排列。 4. 如果需要实现乘法操作,需要遍历每个项并计算乘积,然后将乘积...

Global site tag (gtag.js) - Google Analytics