链表实现对列

    //设置节点  
    public class LinkNode {  
        private Object obj;// 节点内数据对象  
        private LinkNode child;// 对下一个节点的引用  
        private LinkNode parent;// 对下一个节点的引用  
        public LinkNode(Object obj) {  
            this.obj = obj;  
        }  
      
        public void setObject(Object obj) {  
            this.obj = obj;  
        }  
      
        public Object getObject() {  
            return obj;  
        }  
          
        public void setChild(LinkNode child){  
            this.child =child ;  
        }  
      
        public LinkNode getChild() {  
            return child;  
        }  
        public void setParent(LinkNode parent){  
            this.parent =parent ;  
        }  
      
        public LinkNode getParent() {  
            return parent;  
        }  
    }  
    //链表实现队列  
    public class NodeQueue {  
        public static LinkNode front = null;// 第一个节点  
        public static LinkNode last = null;// 最后一个节点  
      
        /** 
         * 程序入口 
         *  
         * @param args 
         */  
        public static void main(String[] args) {  
            NodeQueue nq = new NodeQueue();  
            nq.add("aa");  
            nq.add("bb");  
            nq.add("cc");  
            nq.ModiFyLinkNode(0, "更改");  
            // nq.inserLinkNode(2, "插入");  
            nq.deleteLinkNode(2);  
            nq.printLinkNode(front);  
        }  
      
        // 添加节点  
        public void add(Object object) {  
            // 创建一个新的节点  
            LinkNode node = new LinkNode(object);  
            if (null == front) {// 如果链表为空  
                front = node;  
                last = front;  
            } else {  
                last.setChild(node);  
                node.setParent(last);  
                last = node;  
            }  
        }  
      
        // 根据索引删除元素  
        public void deleteLinkNode(int index) {  
            if (this.getLinkLenght() < index || index < 0) {  
                throw new RuntimeException("下标越界:" + index + "size:"  
                        + this.getLinkLenght());  
            } else {  
                // 得到当前索引位置的节点  
                LinkNode node = this.getLinkNode(index);  
                // 得到父节点  
                LinkNode f_node = node.getParent();  
                // 得到子节点  
                LinkNode c_node = node.getChild();  
                if (f_node == null) {  
                    front = c_node;  
                } else if (c_node == null) {  
                    f_node.setChild(null);  
                } else {  
                    f_node.setChild(c_node);  
                    c_node.setParent(f_node);  
      
                }  
            }  
        }  
      
        // 根据索引和对象名修改节点  
        public void ModiFyLinkNode(int index, Object object) {  
            if (this.getLinkLenght() < index || index < 0) {  
                throw new RuntimeException("下标越界  : " + index + "  size:  "  
                        + this.getLinkLenght());  
            }  
            LinkNode node = this.getLinkNode(index);  
            node.setObject(object);  
        }  
      
        // 获取节点对象  
        public LinkNode getLinkNode(int index) {  
            if (this.getLinkLenght() < index || index < 0) {  
                throw new RuntimeException("下标越界:" + index + "size:"  
                        + this.getLinkLenght());  
            } else {  
                int num = 0;  
                LinkNode node = front;  
                while (num != index) {  
                    node = node.getChild();  
                    num++;  
                }  
                return node;  
            }  
      
        }  
      
        // 插入节点  
        public void inserLinkNode(int index, Object object) {  
            if (this.getLinkLenght() < index || index < 0) {  
                throw new RuntimeException("下标越界" + index + "size:"  
                        + this.getLinkLenght());  
            } else {  
                // 创建新节点  
                LinkNode newnode = new LinkNode(object);  
                // 得到当前节点  
                LinkNode node = this.getLinkNode(index);  
                if (index == 0) {// 如果链表没有节点  
                    front = newnode;  
                } else if (index == this.getLinkLenght()) {// 如果为最后一个节点  
                    node.setChild(newnode);  
                    newnode.setParent(node);  
                } else {  
                    // 得到父节点  
                    LinkNode fnode = node.getParent();  
                    fnode.setChild(newnode);  
                    newnode.setChild(node);  
                }  
                // 新的引用关系  
                newnode.setParent(front);  
      
                node.setParent(newnode);  
            }  
        }  
      
        // 获取节点数,返回链表长度  
        public int getLinkLenght() {  
            int count = 0;  
            if (front == null) {  
                return count;  
            }  
            LinkNode node = front.getChild();  
            while (null != node) {  
                count++;  
                node = node.getChild();  
            }  
            return count + 1;  
        }  
      
        // 遍历链表方法  
        public void printLinkNode(LinkNode root) {  
            if (null != root) {  
                Object data = root.getObject();  
                System.out.println(data);  
                LinkNode temp = root.getChild();  
                printLinkNode(temp);  
            }  
        }  
    }  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值