排队链表 - java

时间:2014-11-20 03:46:01

标签: java linked-list queue

对于一个赋值(很快就会到期),我必须将我手工实现的链表排入队列(不使用java的内置类)。链表如下:

public class SnocList {
    private char c;
    private SnocList l;

    public SnocList(){
    }
    public SnocList (char x, SnocList y) {
        this.c = x;
        this.l = y;
    }
    public char getC(){
        return this.c;
    }
    public SnocList getL(){
        return this.l;
    }
    public void setNext(SnocList input){
        this.l = input;
    }

    public boolean isEmpty() {
        if (this.c == 0) return true;
        return false;
    }
}

我的队列类如下:

public class SnocQueue {
    private SnocList list;

    public SnocQueue(){
        this.list = new SnocList();
    }

    public void enqueue(char c){
        //I don't know what to put here
    }
}

我不知道该怎么做。它显然很简单,但我不知道该怎么做。对于那些想要帮助的人,enqueue会将新节点添加到上一个列表的空引用(空指针)所在的列表中。

['a'| - ] - > ['b'| - ] - > ['c'| null]在这里添加新节点

2 个答案:

答案 0 :(得分:0)

要排队,你需要一个'尾巴'领域和头部'字段也是如此,对于这个例子,我将创建一个类' Item'的对象队列,你可以使用你需要的节点

public class Item {
    private int value;
    private Item next;

    public Item(int val) {
        this.value = val;
    }

    public void setNext(Item item) {
        this.next = item;
    }
}

队列:

public class SomeQueue {
    private Item head;
    private Item tail;
    private int size;//size is used to verify if it has Items and avoid null references

    public SomeQueue(){
        this.size = 0;
    }
    public void enqueue(Item item) {
        if (this.size > 0) {
            this.tail.setNext(item);
            this.tail = item;
        } else { //this is when the size is 0, it means is empty
            this.head = item;
            this.tail = item;
         }
        this.size++;
    }
}

正如您所看到的,队列的重要部分是头部和尾部,方法setNext也很重要,可以在节点之间进行引用。

答案 1 :(得分:0)

  1. 创建一个SnocList头节点-这是第一个 链表中的SnocList节点。
  2. 创建入队方法
  3. 在入队方法中,首先检查头SnocList是否为 空(或== null)。如果是这样,只要抬头 SnocList一个新的SnocList,其中包含您的传入字符和对l SnocList的引用。 l将是null,因为没有其他 链接列表中的SnocLists。然后,return结束该方法的执行。
  4. 如果存在head(else),请使用while循环遍历链接列表,直到找到SnocList,其对l的引用为null
  5. 通过将新的SnocList对象new SnocList(ch, curr.l)分配给以前为空的curr.l,将新的SnocList追加到链接列表的末尾。

    public class SnocQueue {
     SnocList head;
    
     public void enqueue(char ch) {
          if(head == null) {
             head = new SnocList(ch, null);
             return;
          } else {
             SnocList curr = head;
             while (curr.l != null) {
                 curr = curr.l;
             }
             curr.l = new SnocList(ch, curr.l);
          }
     }
    }