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

耗尽温柔 提交于 2020-02-14 11:09:36

一、问题描述

将一个带有头结点的单向列表反转,如将 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;//原链表头部指向反转链表头部指向的结点,,实现反转
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!