A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

周峻

注册黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 周峻 注册黑马   /  2012-3-17 12:48  /  1414 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

链表的 LinkNode 类中逆序reverse()函数, 改了以后不能实现(改的内容见函数注释)???
class Node{
        private String name;
        private Node next;
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public Node getNext() {
                return next;
        }
        public void setNext(Node next) {
                this.next = next;
        }
        public Node() {}
        public Node(String name){
                this.name=name;
        }
        public Node(String name, Node next) {
                this.name = name;
                this.next = next;
        }
}
class LinkNode{
        private Node head;
        private Node tail;
        public Node getHead() {
                return head;
        }
        public void setHead(Node head) {
                this.head = head;
        }
        public LinkNode(){}
        public void add(String name){                         //尾差法建立链表
                Node node=new Node(name);
                if(head==null){
                        head=tail=node;                       
                }
                else{
                        tail.setNext(node);
                        tail=node;                       
                }               
        }
       
        public void print(){
                Node node=head;
                while(node!=null){                       
                        System.out.print(node.getName()+" ");
                        node=node.getNext();
                }               
        }
        public void reverse(){            
                Node node=head.getNext();
                Node temp;
                head.setNext(null);
                while(node!=null){                                  //此循环改如下不能运行为什么,
                        temp=node.getNext();          //temp=node;
                        node.setNext(head);             //
                        head=node;                         //
                        node=temp;                    //node=temp.getNext();
                }                       
        }
}
class Test{
        public static void main(String[] args){
                LinkNode l=new LinkNode();
                l.add("1");
                l.add("2");
                l.add("3");
                l.add("4");
                l.add("5");
                l.add("6");
                l.print();
                System.out.println("\n"+"逆序后------------------");
            l.reverse();
            l.print();
        }
}

2 个回复

倒序浏览
链表每一个元素都是有前指针,元素本身,后指针三部分组成的。就是这个原因所以它增删方便
例如:
a,b,c,d,e五个元素
前指针用qian表示
后指针用hou表示
在链表结果中的实际效果是(本想画图的,画不好)
null,a,hou——>qian,b,hou——>qian,c,hou——>qian,d,hou——>qian,e,null
这个时候逆转就是
1.将e的后指针指向d的前指针,e没有前指针
2.将d的后指针指向c的前指针
3.将c的后指针指向b的前指针
4.将b的后指针指向a的前指针,a没有后指针

想具体了解,可以看数据结构这本书

第一种方法可以用循环方式来做。
第二种就是用链表集合特有的方法,每次取最后一个
回复 使用道具 举报
本帖最后由 段浩亮 于 2012-3-17 13:55 编辑


修改后执行玩一次循环链表中就只剩下两个元素了,后面所有元素都丢失了,因为没有元素指向他们了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马