反转链表的核心思路是什么?

怎么去反转一个单链表,核心思路是什么?希望能够提供文字加java代码解释谢谢

//反转链表的其中一种方法可以是:遍历整个链表,每一步储存上一个节点,到下一个节点处,将指针从指向next反转为指向pre
public ListNode reverse(ListNode p){
    ListNode res = null;//储存结果
    ListNode pTemp = p;//将p变量复制转移
    ListNode pPre = null; //初始化节点,用来储存每一步的前一个节点,实现反转
    while(pTemp != null){
        ListNode pNext = pTemp.next; //定义pNext指向pTemp的下一个结点
        if(pNext==null){ //如果next是空的,说明原链表的遍历已经到头了
            res = pTemp;
        }
        pTemp.next = pPre; 
        pPre = pTemp; 
        pTemp = pNext; 
    }
    return pReversedHead;
}


头插啊,声明一个新链表节点,然后依次将原来的单链表的节点取出,将该节点的next设置为新节点,并用该节点取代新节点

public Node reverse(Node p){
  Node temp, result = null;
  while(p != null) {
    temp = p.next;
    p.next = result;
    result = p;
    p = temp;
  }
}

这也没啥思路吧
从头遍历,自己构建个新的节点,头插法就倒序了

(1)头插法
(2)递归