单链表的逆转

来源:互联网 发布:开票软件金税盘未响应 编辑:程序博客网 时间:2024/05/16 10:06

输入一个链表,从尾到头打印链表每个节点的值。

public class Solution3 {    public static class Node<T>{        public T data;  //数据域        public Node<T> next; //地址域        public Node(T data,Node<T> next){ //构造结点            this.data = data;            this.next = next;        }        public Node(){            this(null,null);        }    }    public static class SinglyList<T> extends Object{        public Node<T> head;  //头指针变量,指向单链表的头节点        public SinglyList(){  //构造空单链表            this.head = new Node<T>(); //创建头结点,data和next均为null        }        public SinglyList(T[] values){            this();  //创建空单链表,只有头结点            Node<T> rear = this.head;  //rear指向单链表的最后一个结点            for (int i = 0;i < values.length;i++){ //values.length == 0,构造空链表                rear.next = new Node<T>(values[i],null);  //尾插入                rear = rear.next;            }        }        public boolean isEmpty(){  //判断链表是否为空            return this.head.next == null;        }        @Override        public String toString(){            //String str = this.getClass().getName()+"("; //返回类名            String str = "(";            for (Node<T> p = this.head.next; p != null; p = p.next){ //p遍历单链表                str += p.data.toString();  //等价于str = str+p.data.toString();                if (p.next != null){                    str += ",";  //不是最后一个结点时,加分隔符                }            }            return str+")"; //空表返回()        }    }    public static class SinglyList_reverse    {        //将单链表逆转,泛型方法,返回值类型前声明类型参数T        public static <T> void reverse(SinglyList<T> list)        {            Node<T> p=list.head.next, front=null;              //head必须声明为public            while (p!=null)            {                Node<T> succ = p.next;                         //succ是p结点的后继结点                p.next = front;                                //使p.next指向p结点的前驱结点                front = p;                p = succ;                                      //p到达后继结点            }            list.head.next = front;                  //设置头结点的地址域指向原单链表的最后一个结点        }    }    public static void main(String args[])    {        //String[] values={"A","B","C","D","E","F"};        Integer[] values = {1,2,3,4,5,6,7,8,9,10,11,12};        SinglyList<Integer> lista = new SinglyList<Integer>(values);        System.out.println("单链表内容:"+lista.toString());        SinglyList_reverse.reverse(lista);        System.out.println("逆转后: "+lista.toString());    }}//输入与输出://        单链表内容:(1,2,3,4,5,6,7,8,9,10,11,12)//        逆转后: (12,11,10,9,8,7,6,5,4,3,2,1)////        Process finished with exit code 0
0 0
原创粉丝点击