链表-单链表逆转-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;
}

 

 

posted @ 2022-04-12 20:03  qmhl开到荼蘼  阅读(27)  评论(0编辑  收藏  举报