将节点插入链接列表

时间:2013-02-21 03:58:18

标签: java list methods insertion

我正在寻找一种方法,它接收对象的信息,创建对象的实例,设置信息,然后创建一个节点并将信息设置到节点,最后将节点插入我所属的链表。链接列表只需按rfidTag String类型进行组织,该类型是9位十六进制表示。这是我到目前为止(我忽略了“by rfidTag”部分)......

public class ItemList {

    ItemInfoNode head;
    ItemInfoNode tail;
    ItemInfoNode cursor;

    int listCount = 0;

    public ItemList(){
        head = cursor = tail = null;
    }

    public void insertInfo(String name, String rfidTag, String initPosition,
            double price) {
        ItemInfo obj = new ItemInfo(name, rfidTag, initPosition, initPosition, price);
        ItemInfoNode temp = new ItemInfoNode();
        temp.setInfo(obj);
    }
}

现在我没有任何关于放什么的线索,但我会告诉你我尝试了什么,并添加评论我失去了什么并希望完成......

ItemInfo obj = new ItemInfo(name, rfidTag, initPosition, initPosition, price);
ItemInfoNode temp = new ItemInfoNode();
temp.setInfo(obj);

if (head == null) {
    head = temp;
    cursor = temp;
    tail = temp;
    head.setNext(cursor);
    tail.setPrev(cursor);
    listCount++;
} else {
    cursor = temp;
    cursor.setPrev(head);
    cursor.setNext(tail);

    System.out.println(cursor.getPrev().getInfo().getName());
    System.out.println(cursor.getInfo().getName());
    System.out.println(cursor.getNext().getInfo().getName());
    // Now I stop here because I do not understand how to put a 3rd in
    // between my head and tail without losing the middle nodes info (cursor)
    // These printlns are here to help me understand what exactly is happening!
    // So I am rather unclear one what my next step should be
}

我当前正试图让我的其他尝试在没有任何异常的情况下运行!完成后会添加!

1 个答案:

答案 0 :(得分:1)

假设 cursor 指向要插入节点的节点。

ItemInfo obj = new ItemInfo(name, rfidTag, initPosition, initPosition, price);
ItemInfoNode temp = new ItemInfoNode();
temp.setInfo(obj);

if(head == null){
  head = tail = cursor = tmp;
}

else{
  if(cursor == tail)
  {
    cursor.setNext(tmp);
    tmp.setPrev(cursor);
    tail = tmp;
  }
  else
  {
    tmp.setNext(cursor.getNext());
    tmp.setPrev(cursor);

    cursor.getNext().setPrev(tmp);
    cursor.setNext(tmp);
  }
}

listCount++;

这样,如果第一次插入节点,那么All(head,tail和cursor)将指向第一个节点。如果已经存在n个节点,则我们需要根据光标的位置插入新节点。如果光标指向尾部,则在末尾添加新节点并更新尾部。如果光标指向任何其他节点(包括头部),则在光标和尾部未触及后插入新节点。在两种情况下,头部都是不受影响的,即,头部总是指向第一个节点。 [Tail将始终指向最后一个节点 - 并相应地更新]

希望这会有所帮助!!