实现带头结点的单向链表反转

一、问题描述

将一个带有头结点的单向列表反转,如将 head -> node1 -> node2 -> node3 转换成 head -> node3 -> node2 -> node1。

二、解决思路

  1. 定义一个新的头结点;
  2. 遍历原链表的结点,每遍历到一个结点便将该结点取出添加到新链表的第一个位置;
  3. 原链表遍历完成之后将原链表的头部指向新链表头部所指向位置,反转完成。
  • 初始如下:

  • 定义两个变量,一个变量 cur 保存当前节点,一个变量 next 保存当前节点的下一节点位置。

  • 将当前节点的下一个节点指向新链表头部所指向节点,新链表头部所指向当前节点,当前节点后移。

三、实现代码

public static void reverseNode(Node head){
        if (head.next == null || head.next.next == null){
            return;
        }
        Node cur = head.next;//保存原链表的下一个位置
        Node next = null;//当前节点的下一节点
        Node reverseNode = new Node("");//重新声明一个头部
        while (cur != null){
            next = cur.next;//暂时保存当前节点的下一个节点
            cur.next = reverseNode.next;//cur的下一个节点指向新的链表的最前端
            reverseNode.next = cur;//将cur连接到新的链表上
            cur = next;//cur后移
        }
        head.next = reverseNode.next;//原链表头部指向反转链表头部指向的结点,,实现反转
    }

猜你喜欢

转载自www.cnblogs.com/Mhang/p/12306457.html
今日推荐