如何在Java中实现循环链表?

超人

我读了一本关于“数据结构和算法”的书,其中有分配要求我实现一个循环链表。这是一个学习练习,我的代码可能不是很高的标准。

实现循环链​​接列表的主要思想是有一个指向最后一个元素的指针,并且每次添加新项目时,都会刷新最后一项的字段“ next”以指向新添加的项目。

插入方法效果很好,我可以添加项目而没有任何问题,但是由于某些原因,我无法从列表中删除项目。

这是“链接”或“节点”的代码:

public class Link {
  public long data;
  public Link next;

  public Link(long val) {
    data = val;
    next = null;
  }

  public void displayLink() {
    System.out.print(data + " ");
  }

}  // end class

这是执行该工作的类的代码,该错误显然在此处:

public class CircularList {
Link first;
Link last;

public CircularList() {
     first = null;
     last = null;
}

public Link find(long key) {
    Link current = first;
    while(current.data != key) {
        current = current.next;
    }
    return current;
} // end find

public Link delete() {
    if(first.next == null) 
        last = null;
    Link temp = first;
    first = first.next;
    return temp;
}  // end delete

public boolean isEmpty() { return (first == null); }

public void insert(long val) {
    Link newLink = new Link(val);

    if(isEmpty())
        last = newLink;

    newLink.next = first;
    first = newLink;
    last.next = first;
} // end insert

public void displayAmount(int n) {
    Link current = first;
    while(n>0) {
        current.displayLink();
        current = current.next;
        n--;
    }
    System.out.println("");
} // end displayAmount

}  // end class

和主要的应用程序代码:

public class App {
public static void main(String[] args) {
    CircularList cl = new CircularList();

    cl.insert(10);
    cl.insert(20);
    cl.insert(30);
    cl.insert(40);

    cl.displayAmount(6);

    cl.delete();

    cl.displayAmount(6);
}
}  // end class

显示量看起来很愚蠢,我只是想避免无限循环,并简化了一些可行的方法。

保罗·罗

在delete()函数中添加last.next = first之前return temp

public Link delete() {
    if(first.next == null) 
        last = null;
    Link temp = first;
    first = first.next;
    if(last != null)
        last.next = first
    return temp;
} 

更新:

我找不到满足的方案first.next == null,我们应该考虑在空列表上调用delete()。

public Link delete() {
    Link temp = first;
    if(first == null){
        ;  // or you can throw some exception as a warning
    }
    else if(first==last){  // only one element
        first = null; // reset to initial state
        last = null;
    }
    else{
        first = first.next;
        last.next = first;
    }
    return temp;
} 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

java-如何在使用链表实现的堆栈中实现弹出操作?

来自分类Dev

Java中的链表实现

来自分类Dev

我如何在Java中实现此for循环

来自分类Dev

您将如何在Rust中实现双向链表?

来自分类Dev

如何在双向链表中实现擦除方法

来自分类Dev

如何在C中实现具有多个节点的链表?

来自分类Dev

Java链表实现中的入队操作中赋值是如何工作的

来自分类Dev

在Java中遍历循环链表

来自分类Dev

在Java中遍历循环链表

来自分类Dev

如何在Linq中实现嵌套的for循环?

来自分类Dev

如何在.kv文件中实现for循环

来自分类Dev

如何在Julia中实现递减的for循环?

来自分类Dev

如何在目标C中实现for循环

来自分类Dev

如何在parseJson中实现for循环?

来自分类Dev

Java中链表中的循环/循环检测

来自分类Dev

Java中链表上的Quicksort实现

来自分类Dev

如何从循环链表中删除重复项

来自分类Dev

难道这链表实现循环?

来自分类Dev

如何在python中实现n次嵌套循环?

来自分类Dev

如何在Julia中在for循环中实现5维数组?

来自分类Dev

如何在嵌套循环的openmp中实现break函数

来自分类Dev

如何在RXJS订阅中实现While循环

来自分类Dev

如何在Erlang中实现以下循环?

来自分类Dev

如何在PySimpleGUI代码中实现永远运行的循环?

来自分类Dev

XSLT:如何在单个XML中实现多循环元素

来自分类Dev

如何在python的matlab工作区中实现基本循环?

来自分类Dev

如何在 Python 中实现非阻塞无限循环

来自分类Dev

如何在Android中实现循环检查/勾选动画?

来自分类Dev

正弦如何在Java中实现?