制作一个链表,其中每个节点都连接到另一个链表.(爪哇)



我正在创建一个程序,该程序将读取文件,按字典顺序组织所有单词,并输出单词,它在文档中出现的次数以及它出现的行。我已经在四个不同的类文件中实现了此代码。但是,我在将单词链接到链表时遇到问题,该链表将显示链表到达的行号。我应该使用前后节点来遍历列表,并且不确定如何遍历此列表并打印出每个单词。

以下是类的代码,该类采用字符串并创建链表:

private class Node
        implements Entry<String, IntQueue> {
    String key;
    IntQueue queue = new IntQueue();
    Node link;
    Node(String keyword, Node newlink) {
        key = keyword;
        link = newlink;
    }
    public String getKey() {
        return key;
    }
    public IntQueue getValue() {
        return queue;
    }
    public IntQueue setValue(IntQueue queue) {
        throw new UnsupportedOperationException();
    }

}
private Node head = new Node("", null);
public ListMap() {
    // Not needed, since head defaults to null anyway.
}
public void insert(String key, int linenr) {
    misc.trace("insert", key, linenr);
    Node prevcursor = head;
    Node cursor = head.link;
    boolean write = false;
    while (cursor != null) {
        if (key.compareTo(cursor.getKey()) < 0) {
            prevcursor.link = new Node(key, prevcursor.link);
            prevcursor.link.getValue().insert(linenr);
            write = true;
            break;
        }
        if (key.compareTo(cursor.getKey()) == 0) {
            cursor.queue.insert(linenr);
            write = true;
            break;
        }
        prevcursor = prevcursor.link;
        cursor = cursor.link;
    }
    if (!write) {
        prevcursor.link = new Node(key, prevcursor.link);
        prevcursor.link.getValue().insert(linenr);
    }
}

这是精确地制作 int 链表的代码:

  class IntQueue
            implements Iterable<Integer> {
        private class node {
            int linenr;
            node link;
            node(int number, node newlink) {
                linenr = number;
                link = newlink;
            }
        }
        private int count = 0;
        private node rear = null;
        private node front = new node(0, null);
        private int linenumb = 0;
       private int count = 0;
   private node rear = null;
   private node front = null;
   private int linenumb= 0;

     public void insert (int number) {
          ++count;
          misc.trace (count);
          if(front=null){
          node temp = new node(number,rear.link);
          front = temp;
          rear = temp;
          }else{
          if(linenumb != number ){
            rear.link= new node(number,null);
            }
          }
          linenumb = number;
          rear = rear.link;
       }

最大的问题是第二类中的插入功能。我不明白如何链接前后,并在每次调用函数时以以后可以调用的方式一致地添加新节点

如果您的第一个问题是如何为IntQueue编写insert方法,那么这里有一些建议。我假设您不希望编写代码,因为这看起来像是一个任务。

  1. 您正在创建一个新节点作为构造列表时的front。这很可能是一个错误。该列表最初为空,通常表示为frontrear正在null

  2. insert中要做的第一件事是检查front是否为空。如果是,您只需设置frontrear到新节点。

  3. 之后,您知道rear将指向最近插入的节点,因此您只需检查要插入的新 int rear.lineNumber

  4. 假设您需要一个新节点,请创建它,rear.link指向它,然后rear指向它。

大功告成。

由于您的赋值是一个链表,每个节点都包含一个链表,我希望您的类定义如下:

class WordList {
    private class Node {
        private String word;
        private int count;
        private LineNumberList lineNumbers;
        private Node next;
    }
    private Node head;
    private Node tail;
    public addWord(String word, int lineNumber) {
        ...
    }
}
class LineNumberList {
    private class Node {
        private int lineNumber;
        private Node next;
    }
    private Node head;
    private Node tail;
    public addLineNumber(int lineNumber) {
        ...
    }
}

addWordaddLineNumber都应该遵循与我上面的算法相同的模式。但是,addWord需要首先查找该单词,如果不存在,则以 1 的计数插入它,如果存在,则增加计数。

相关内容

  • 没有找到相关文章

最新更新