JAVA单链表反转

来源:互联网 发布:软件运营部门 编辑:程序博客网 时间:2024/06/03 14:42

非递归的方法,直接代码:

class Node {    public int value;    public Node next;    public Node() {    }    public Node(int value) {        this.value = value;    }}public class ReverseLinkedNode {    public static void main(String[] args) {        Node node1 = new Node(1);        Node node2 = new Node(4);        Node node3 = new Node(2);        Node node4 = new Node(0);        node1.next = node2;        node2.next = node3;        node3.next = node4;        printAllNode(node1);        Node newHead = reverseLinkedNode(node1);        printAllNode(newHead);    }    public static void printAllNode(Node node){        while(null != node){            System.out.println(node.value);            node = node.next;        }    }        public static Node reverseLinkedNode(Node node){        if(null == node || null == node.next){            return node;        }        Node curNode = node.next;        //注意头结点要更新为空        node.next = null;        Node nextNode = null;        while(null != curNode){            //暂存当前待处理节点的下一个,防止链条断了            nextNode = curNode.next;            //当前待处理节点指向当前的头结点            curNode.next = node;            //当前的头结点更新为上面的当前待处理节点            node = curNode;            //上面的当前待处理节点更新为上面暂存的下一个,如此循环到终点            curNode = nextNode;        }        return node;    }}

递归时,遍历到最后一个节点,往前逐个更新链条即可

//递归方式    public static Node reverseLinkedNodeOne(Node node) {        if (null == node || null == node.next) {            return node;        } else {            Node curNext = reverseLinkedNodeOne(node.next);            node.next.next = node;            node.next = null;            return curNext;        }    }



原创粉丝点击