怎么去反转一个单链表,核心思路是什么?希望能够提供文字加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)递归