链表-单链表逆转-1
参考链接:
https://blog.csdn.net/qq_34159635/article/details/120010092
https://blog.csdn.net/exodus3/article/details/120688463 【尚硅谷】
public static ListNode reverseListByInsert(ListNode listNode){
//定义一个带头节点的
ListNode resultList = new ListNode(-1);
//循环节点
ListNode p = listNode;
ListNode tempList = null; //指向当前节点[p]的下一个节点
while(p!= null){
//保存插入点之后的数据
tempList = p.next;// 先暂时保存当前节点的下一个节点,因为后面需要使用
p.next = resultList.next;// 将p的下一个节点指向新的链表的最前端
resultList.next = p;// 将p 连接到新的链表上
p = tempList;// 让cur后移
}
return resultList.next;
}
// 将单链表反转 这里的head 本来就是带虚拟头结点 所以下面才有 head.next.next
public static void reversetList(HeroNode head) {
// 如果当前链表为空,或者只有一个节点,无需反转,直接返回
if (head.next == null || head.next.next == null) {
return;
}
// 定义一个辅助的指针(变量),帮助我们遍历原来的链表
HeroNode cur = head.next;
HeroNode next = null;// 指向当前节点[cur]的下一个节点
HeroNode reverseHead = new HeroNode(0, "", "");
// 遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead 的最前端
while (cur != null) {
next = cur.next;// 先暂时保存当前节点的下一个节点,因为后面需要使用
cur.next = reverseHead.next;// 将cur的下一个节点指向新的链表的最前端
reverseHead.next = cur; // 将cur 连接到新的链表上
cur = next;// 让cur后移
}
// 将head.next 指向 reverseHead.next , 实现单链表的反转
head.next = reverseHead.next;
}