/** * 两种形式(递归和非递归)实现单链表原地逆置 * leetcode #206 */public class Reverse {    class Node{        int value;        Node next;        Node(int x){            value = x;        }    }    //非递归,双指针,头插法    public Node reverse1(Node head){        if(head == null || head.next == null){            return head;        }        //p存储第一个元素,r用于p与前面链表断开时长期存储前面元素        Node p = head.next, r;        //头节点断开        head.next = null;        while (p != null) {            //r长期存储后边的元素,因为p要与后边的断开            r = p.next;            //p与前面断开,且指向头节点后边的元素            p.next = head.next;            //头节点与p相连,p插入到头节点与先来的元素之间            head.next = p;            //后移一个,持续逆置            p = r;        }        return head;    }    public Node reverse2(Node head){        if(head == null || head.next == null){            return head;        }                //递归到链表开端,走下面的递归进口最初一个元素间接通过return head 失去        //而后返回到倒数第二层执行最初三行代码,顺次失去逆置的元素        //能够依据下图帮忙了解        Node newHead = reverse2(head.next);        head.next.next = head;        head.next = null;        return newHead;    }}