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


    一、问题描述

    将一个带有头结点的单向列表反转,如将 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;//原链表头部指向反转链表头部指向的结点,,实现反转
        }
    
  • 相关阅读:
    20190905-3 命令行和控制台编程
    作业要求 20181009-9 每周例行报告
    每周例行报告
    单元测试,结对
    四则运算试题生成
    代码规范,结对要求
    规格说明书-吉林市2日游
    功能测试
    每周例行报告2
    get与post请求的区别
  • 原文地址:https://www.cnblogs.com/Mhang/p/12306457.html
Copyright © 2020-2023  润新知