今天真郁闷,上午去华为面试,考的不太理想,其中有一题面试题一直没弄懂怎么做,题目如下:
设计一个双链表类,然后在类里面分别写增加,插入,删除节点的方法!
有那位高手会做啊,请指教!

解决方案 »

  1.   

    我也知道要用LinkedList,可是就是不知道程序应该怎么写,应该如从下手,郁闷啊!哪位高手能提供答案啊,小弟感激不尽!
      

  2.   

    我的理解,其实是让你实现一个简单的LinkList,先定义一个节点类,该类包含指向前一节点跟后一节点的两个节点对象。然后再定义一个List类,分别实现增加,修改,删除节点的方法,第一个节点特别注意一下就可以了。
      

  3.   

    class DQueue implements Collection{
    private LinkedList lists ;
    public DQueue(){
         lists = new LinkedList();
    }
    public void  put_front(Object v){
    lists.addFirst(v);
    }
    public void put_back(Object v){
    lists.addLast(v);
    }
    public Object get_front(){
    return lists.removeFirst();
    }
    public Object get_Back(){
    return lists.removeLast();
    }
    public boolean isEmpty(){
    return lists.isEmpty();
    }
    public int size(){
    return lists.size();
    }
    public boolean contains(Object o) {
        return lists.contains(o);
      }
      public Iterator iterator() {
        return lists.iterator();
      }
      public Object[] toArray() {
        return lists.toArray();
      }
      public Object[] toArray(Object a[]) {
        return lists.toArray(a);
      }
      public boolean add(Object o) {
        lists.addLast(o);
        return true;
      }
      public boolean remove(Object o) {
        return lists.remove(o);
      }
      public boolean containsAll(Collection c) {
        return lists.containsAll(c);
      }
      public boolean addAll(Collection c) {
        return lists.addAll(c);
      }
      public boolean removeAll(Collection c) {
        return lists.removeAll(c);
      }
      public boolean retainAll(Collection c) {
        return lists.retainAll(c);
      }
      public void clear() { lists.clear(); }
    }
      

  4.   

    LinkedList avXList = new LinkedList()
    while(rs.next())
    {
        avXList.add(rs.getString("X").trim());
    }
      aXList = new String[aXList.size()];
      avXList.toArray(aXList);
    rs.close();
      

  5.   

    注意是设计一个双向链表,不是用现成的:
    package linkbean;public class DLink {
    private Object data;
    private DLink next;
    private DLink pre;

    /**
     * @return Returns the data.
     */
    public Object getData() {
    return data;
    }
    /**
     * @param data The data to set.
     */
    public void setData(Object data) {
    this.data = data;
    }
    /**
     * @return Returns the next.
     */
    public DLink getNext() {
    return next;
    }
    /**
     * @param next The next to set.
     */
    public void setNext(DLink next) {
    this.next = next;
    }
    /**
     * @return Returns the pre.
     */
    public DLink getPre() {
    return pre;
    }
    /**
     * @param pre The pre to set.
     */
    public void setPre(DLink pre) {
    this.pre = pre;
    }
    }DoubleLinkTable.java:
    public class DoubleLinkTable {
    /**
     * 用于存储临时数据
     * */
    private DLink myDlink;
    /**
     * 指向头一个节点高
     * */
    private DLink frist;
    /**
     * 当前操作节点
     * */
    private DLink now;
    /**
     * 指向最后一个节点
     * */
    private DLink last;

    /**
     * 
     * 构建器用于初始化双向链表*/
    public DoubleLinkTable(){
    this.frist = new DLink();
    this.last = new DLink();
    this.frist.setNext(this.last);
    this.last.setPre(this.frist);
    this.now = this.frist;
    }

    /**
     * 该方法在链表的末尾加上一个节点
     * */
    public void add(Object data){
    this.myDlink = new DLink();
    this.myDlink.setData(data);

    this.myDlink.setPre(this.last);
    this.last.setNext(this.myDlink);
    this.last = this.myDlink;
    this.myDlink = null;
    }

    /**
     * 该方法在链表的当前位置插入一个节点
     * */
    public void insert(Object data){
    this.myDlink = new DLink();
    this.myDlink.setData(data);

    this.myDlink.setNext(this.now.getNext());
    this.myDlink.setPre(this.now);
    this.now.getNext().setPre(this.myDlink);
    this.now.setNext(this.myDlink);
    this.myDlink = null;
    }

    /**
     * 该方法将删除指定的节点
     * 如果删除的是第一个节点,那么index的值应该为0
     * 如果删除第一个那么index应该为1
     * 如果超界将会弹出异常
     * */
    public void delete(int index){
    this.myDlink = this.frist;
    for(int i = 0 ; i < index ; i++){
    this.myDlink = this.myDlink.getNext();
    if(this.myDlink == null){
    throw new RuntimeException("溢出!");
    }
    }

    /*这里已没有考虑当删除头节点或尾节点的情况*/
    this.myDlink.getNext().setPre(this.myDlink.getPre());
    this.myDlink.getPre().setNext(this.myDlink.getNext());
    this.myDlink = null;
    }

    /**
     * 该方法负责向后移动节点
     * */
    public void next(){
    this.now = this.now.getPre();
    }

    /**
     * 该方法负责向前移动节点
     * */
    public void pre(){
    this.now = this.now.getPre();
    }
    }
      

  6.   

    作为野战军的我,鄙视华为,tmd非要四级证