java - Java中向循环双向链表添加节点

标签 java linked-list doubly-linked-list

我尝试创建并打印一个循环双向链表,其中包含保存字母表中每个字母值的节点。

这是迄今为止我的代码:

CircularDoublyList.java

public static void main(String[] args) 
{
    CDLL<Character> head = null;
    CDLL<Character> tail = null;

    CDLL <Character> p = null; 
    for(char c = 'A'; c <= 'Z'; c++) {
        p = new CDLL<Character>(c, null, null);        
        if (head == null)
        {
            p.setNext(p);
            p.setPrevious(p);
            head = p;
            tail = head;
        }
        else
        {
            p.setPrevious(tail);
            tail.setNext(p);
            head.setPrevious(p);
            p.setNext(head);
            head = p;    
        }
    }

    print(p); 
}

public static void print(CDLL<Character> list) {
    String str = "";
    while(list != null) {
        str += list.getPrevious().getValue() + " ";         
        list = list.getPrevious();
    }
    System.out.print(str);
}

问题:我尝试打印列表,但似乎没有显示任何内容,并且控制台中没有错误消息。任何帮助,将不胜感激。

最佳答案

嗯,因为列表是循环的,所以代码:

while(list != null) {
    str += list.getPrevious().getValue() + " ";         
    list = list.getPrevious();
}

将继续原地踏步,永不停歇。

只需更改您的方法,使其在再次找到第一个节点时停止:

public static void print(CDLL<Character> list) {
  String str = "";
  CDLL<Character> first = null;
  while (true) {
    str += list.getPrevious().getValue() + " ";
    if (first == null) 
       first = list.getPrevious();
    else if (first == list.getPrevious())
       break;
    list = list.getPrevious();
  }
  System.out.print(str);
}

关于java - Java中向循环双向链表添加节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39842954/

相关文章:

c++ - 如何跟踪单链表的开头?

c++ - 为什么 head 值不是 "NULL"?

无法从单链表中删除元音

java - 在 onSizeCanged() 中初始化对象时出现 NPE

java - Portal-container中立的方法从portlet请求中获取httpservletrequest

java - JBox2D - 查找碰撞坐标

C++使用For循环创建双向链表

java - RESTEasy 中无法识别 JAX-RS 应用程序路径

java - 双循环链表GetData方法

c++ - 如何删除双向链表中与某个值匹配的所有项?