Java 单链表反转 递归的运用

创建链表

public class NodeList {
    private int element;
    private NodeList nextNode;

    public int getElement() {
        return element;
    }

    public void setElement(int element) {
        this.element = element;
    }

    public NodeList getNextNode() {
        return nextNode;
    }

    public void setNextNode(NodeList nextNode) {
        this.nextNode = nextNode;
    }
}

给链表添加数据

public static void main(String[] argv){
        //实例化链表
        NodeList list = new NodeList();
        //设值
        list.setElement(1);
        //实例化链表
        NodeList next = new NodeList();
        //设值
        next.setElement(2);
        //设值链表
        list.setNextNode(next);
        //空链表
        NodeList cur;
        //设值
        for (int i = 3; i <= 20; i++) {
            cur = new NodeList();
            cur.setElement(i);
            // 下一个链表
            next.setNextNode(cur);
            //获取下一个表
            next = next.getNextNode(); 
        }
    }

反转链表(递归)

    public static NodeList reverse(NodeList nodeList){
        //当前链表或下一项为空时返回
        if(nodeList == null || nodeList.getNextNode() == null){
            return nodeList;
        }
        //获取下一项链表
        NodeList list = reverse(nodeList.getNextNode());
        //下一项链表的下一个指针位置指向当前链表
        nodeList.getNextNode().setNextNode(nodeList);
        //当前链表的下一项指针位置 设置为空 为终止条件返回当前链表
        nodeList.setNextNode(null);
        return list;
    }

输出

    public static void printNodeList(NodeList nodeList){
        if(nodeList != null){
            System.out.print(nodeList.getElement()+",");
            printNodeList(nodeList.getNextNode());
        }
    }

 

posted @ 2016-11-08 12:52  小严  阅读(759)  评论(0)    收藏  举报