剑指offter Java单链表反转
应上篇文章说的做一篇单链表的反转问题。关于怎么创建单链表问题我已经写过了一篇:https://blog.csdn.net/nisemono_ct/article/details/95514797
单链表反转
之前没弄懂单链表的结构,所以做起来一头雾水,但是弄懂以后,看单链表就类似于一个ArrayList,除了存储结构不一样,区别不大。
先放代码,然后在详细解释吧思想吧。为了更直观看到地址的变化,我选择了在DeBug模式下运行的。
public void ReverseList(){ //单链表反转ListNode newHead=null; //创建一个新链表ListNode pNode=head; //pNode记录链表当前的头地址while(pNode!=null){ListNode pNext=pNode.next; //记录当前链表的下一个地址ListNode p=pNode; //记录当前链表的总长度p.next=newHead; //当前地址的指向,让他指向一个新的链表newHead=p; //让新链表记录,新建的链表地址以及长度pNode=pNext; //上边操作过了p,所以必须要让pNode等于当前链表下一个节点 否则链表会断掉}head=newHead;
但是Debug参数没办法复制,我放上一张图片。
之前以为Java不存在指针,然而实际情况确实Java中有指针,只是我们一般用不到。再说思路前,先画一张图,表述一下单链表的结构吧。
链表地址可以不连续,因为有next指针指向下一个地址。这里连续是因为程序在运行的过程中开辟的是一段连续的地址空间。
先介绍一下我的思路方式。我是创建了一个新的链表,然后让新链表,一节一节的吃掉原来的链表,吃到最后,就会出现循序反转的情况。
第一次循环后,指针位置。
实际上除了中间的两行代码:
p.next=newHead; //当前地址的指向,让他指向一个新的链表
newHead=p;
其他的代码一直都是在记录地址位置,防止链表指向空后,找不回来了。
这两行代码干了什么事呢,没执行一次循环,newHead就吃一个节点。一共五个循环,我放五张图表述吧,语言不好组织,也不形象。
为了防止图片表达不能清楚描述,前边三幅图都是没执行循环中pNode=pNext; 语句的地址
写在最后的,Java中的指针和C++是一样的,地址值发生改变,相对的指针指向的值都会改变。拿最后一张图举例,如果对pNext执行一个pNext=newHead操作。pNode与p都会指向newHead。如果你发现你的链表经常中断,不妨看下是不是改变了地址中的值。
希望这篇博客能帮助新手更好理解链表,也希望大佬指正出写的错误,和不到位的地方。
剑指offter Java单链表反转相关推荐
- Java单链表反转 详细过程
Java单链表反转 Java实现单链表翻转 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51119499 (一) ...
- java 单链表反转_Java实现单链表翻转详解
单链表翻转比如有如下链表: 需要按照C B A 输出,我们可以有好几种方法: package org.andy.test; import java.util.ArrayList; import jav ...
- java单链表反转(头插法)详解
链表反转思路(简述): 链表分为单链表和双链表,细分为单向循环链表和双向循环链表.本章节主要讲述单向链表的反转.在接触到这张文章之前相信大家已经对链表(链表的组成部分)有所了解,链表内部由节点构成,每 ...
- 剑指offer java版 test3—从尾到头打印链表
标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...
- Java实现单链表反转操作
单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据.二是指针域,用于存储下一个节点的地址.在Java中定义如下: public class ...
- 数据结构1:单链表反转java代码解释
来源于尚硅谷的老师代码,只因其中有几行代码自己课上没听明白,课后自己整理了一下 首先完整代码如下: //将单链表反转 public static void reversetList(HeroNode ...
- java数据结构 - 单链表(腾讯面试题实现单链表反转)
直接上实现代码 //单链表的反转public static void reverseList(HeroNode head){//如果当前链表为空,或只有一个节点,无需反转if (head.next = ...
- java 反转jia链表_Java实现单链表反转
本文主要介绍单链表反转的两种方法,记录如下: 1. package com.leetcode; public class ListReverse { public static void main(S ...
- 剑指offter笔记
剑指offter笔记 数组中重复的数字 二维数组中的查找 替换空格 从尾到头打印链表 递归反转链表解题思路 重建二叉树 用两个栈实现队列 斐波那契数列 青蛙跳台阶问题 旋转数组的最小数字 矩阵中的路径 ...
最新文章
- 输入n,求n位以内的水仙花数
- 《敏捷时代》作者访谈录
- java web接收POST数据
- ajax成功或失败的原因,实际上成功后,AJAX发布请求报告失败
- android数据持久化存储(2)
- 纪中B组模拟赛总结(2020.2.22)
- mysql查询问题解答_mysql查询问题
- android 开源项目介绍
- 斐讯k2路由器刷pandorabox认证哆点Drcom
- python装在c盘、怎么换到d盘_怎么把安装在c盘的东西移到d盘_如何把c盘的应用程序移到d盘...
- 创新工场李开复:漫延——中国移动互联网的2011年
- Paxos算法的一个简单小故事
- cortex A73/A53/A57
- 升级Android SDK (API24)笔记
- python求多叉树任意两点之间的距离
- Redis高可用架构
- 缓解职场压力和心理疲劳
- 自制电脑红外遥控接收器(PC软解码)
- 百面机器学习04-降维
- Soc-e在FPGA上为任务关键型应用量身定制的IEEE 1588感知以太网交换机