妈的,我看错题目了,我以为reverse方法会为一个翻转后的链表,不看错就更简单

解决方案 »

  1.   

    class Node{
        private Object data;
        private Node next;
        public void setData(Object data){
          this.data=data;
        }
        public void setNext(Node next){
          this.next=next;
        }
        public Object getData(){
          return data;
        }
        public Node getNext(){
          return next;
        }
        //原题有2个getter,2个setter,我改为public的
        public Node(Object d,Node n){
            data=d;next=n;
        }
        
        public void print(){
          System.out.println("Node:"+this+",data:"+getData());
        }
    }public class SingleLinkedList{
        private Node head;
        
        public void setHead(Node head){
          this.head=head;
        }
        public Node getHead(){
          return head;
        }
        
        public SingleLinkedList(){
            head=null;
        }    public void reverse(){
            //请实现此方法
            if (null==head)
              return;
            
            Node temp1=head;
            Node temp2=temp1.getNext();
            head.setNext(null);
            
            while(null!=temp2){
              head=temp2;
              Node temp3=temp2.getNext();
              temp2.setNext(temp1);
              temp1=temp2;
              temp2=temp3;
            }    }
        
        public static void main(String[] args){
          SingleLinkedList sl=new SingleLinkedList();
          Node node=new Node("only one",null);
          sl.setHead(node);
          System.out.println("Oraginal!");
          test(sl);
          sl.reverse();
          System.out.println("After reverse!");
          test(sl);      Node begin=new Node("one",null);
          Node temp=begin;
          node=new Node("two",null);
          begin.setNext(node);
          begin=node;
          node=new Node("three",null);
          begin.setNext(node);
    //      begin=node;
          sl.setHead(temp);
          
          System.out.println("Oraginal!");
          test(sl);
          sl.reverse();
          System.out.println("After reverse!");
          test(sl);    }
        
        public static void test(SingleLinkedList sl){
          Node node=sl.getHead();
          while(null!=node){
            node.print();
            node=node.getNext();
          }
        }
    }
      

  2.   

    楼上为什么为有这样的习惯:null!=node
    node!=null看着更舒服
    java语言的整形和布尔型不可以转换的
      

  3.   

    嗯,我写所有的条件语句都是把常量放前面,比如
    false==isOK
    1==i
    null==str
    免得自己犯少写=的错误,呵呵 :),比如isOK=false
    i=1
    str=null
      

  4.   

    我把2个getter,2个setter去掉是为了编程方便,不要大家写,只要写    public void reverse就行了,可以不用setter和getter,太麻烦,也不用加其他方法,不用加main
      

  5.   

    不用getter,setter不习惯!
    我上面那个reverse就可以了,再写也写不出什么花样了。
      

  6.   

    嗯,我写所有的条件语句都是把常量放前面,比如
    false==isOK
    1==i
    null==str
    免得自己犯少写=的错误,呵呵 :),比如
    这是c++后遗症。你写i=1根本通不过编译,而且可读性更强阿
      

  7.   

    我的写法,不需要判断if (null==head)return;:
        public void reverse(){
            //请实现此方法
            Node temp,another=null;
            
            while(null!=head){
              temp=head;
              head=temp.next;//头删除head链表
              temp.next=another;
              another=temp;//头插入another链表
            }
            head=another;
        }