java实现单链表倒转的方法
java中有关单链表反转的方法有很多种,这里记录一种并附上详细步骤:
代码如下
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode reverseList(ListNode head) { ListNode pre; ListNode temp; pre = head; // 前驱节点 ListNode cur = head.next //当前节点 while(cur != null && cur.next != null){ temp = cur.next; //(1) cur.next = pre; //(2) pre = cur; //(3) cur = temp; //(4) } head.next = null //原头节点,反转后尾节点 return pre; //原尾节点 反转后头节点 } }
主要的操作是在while循环中,下面画图解释一下是如何实现单链表倒转的:
首先java中没有指针的概念,但是可以看到ListNode中的next属性其实就代表指向下一个节点的“指针”,因此可以这样来理解:
1、原单链表:
假设单链表有三个元素[1,2,3],0为上述的头对象
2、执行(1)、(2)后:
cur.next指向了n.next:
3、执行(3):
4、执行(4):
第一次循环结束,第一次循环后的单链表如上图所示。
cur != null && cur.next != null,因此执行第二次循环:
5、第二次执行(1),(2):
6、第二次执行(3):
7、第二次执行(4):
cur.next == null 推出循环
以上,实现单链表的倒转。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Java实现单链表SingleLinkedList增删改查及反转 逆序等
节点类 可以根据需要,对节点属性进行修改.注意重写toString()方法,以便后续的输出操作. //节点类 class Node { public int id; public String name; public Node next; public Node(int id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "Node{" + &
-
Java实现单链表反转的多种方法总结
对于单链表不熟悉的可以看一下基于Java实现单链表的增删改查 一.原地反转 1.新建一个哨兵节点下一结点指向头结点 2.把待反转链表的下一节点插入到哨兵节点的下一节点 反转之前的链表:1–>2–>3–>4>–>5 加入哨兵节点:dummp–>1–>2–>3–>4>–>5 原地反转: 定义:prev=dummp.next; pcur=prev.next; prev.next=pcur.next; pcur.next=dummp.next; d
-
Java实现单链表翻转实例代码
Java实现单链表反转,递归和非递归两种形式 /** * 反转单链表 */ /** * 定义链表 * * @author 16026 * */ class Node { int val; Node next; public Node(int val) { this.val = val; } } public class ReverseList { /** * 反转链表 * * @param head * @return */ public static Node reverseList(Node
-
Java单链表反转图文教程
前言 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享
-
java 实现单链表逆转详解及实例代码
java 实现单链表逆转详解 实例代码: class Node { Node next; String name; public Node(String name) { this.name = name; } /** * 打印结点 */ public void show() { Node temp = this; do { System.out.print(temp + "->"); temp = temp.next; }while(temp != null); System.o
-
Java 反转带头结点的单链表并显示输出的实现过程
注意:要保证已经有Node类和单链表的初始化,这样才能调用反转方法并显示结果. 方法如下: //Node<T>指泛型结点类 public void reverse2(Node<T> head){ Node<T> p=head.next; Node<T> q=head.next.next; head.next=null; p.next=null; while(q!=null){ Node<T> temp=q.next; q.next=p; p=q;
-
java实现单链表倒转的方法
java中有关单链表反转的方法有很多种,这里记录一种并附上详细步骤: 代码如下 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode reverseList(Li
-
用JAVA实现单链表,检测字符串是否是回文串
一.需求 使用JAVA实现单链表,使用单链表检测字符串是否是回文串 二.需求分析 回文串最重要的就是对称,那么最重要的问题就是找到那个中心,用快指针每步走两格,当他到达链表末端的时候,慢指针刚好到达中心,慢指针在遍历过程中(快指针到达末端时)把走过的节点进行反向操作,此时从中位点分为前后两部分,此时前半部分的指针开始往回指(取next的时候,取的是前一个节点),而慢指针继续向前,跟前半部分的数据依次进行比对,当慢指针扫完整个链表,就可以判断这是回文串,否则就提前退出,同时在前半部分往回遍历的过程
-
java实现单链表中的增删改
本文实例为大家分享了java实现单链表中增删改的具体代码,供大家参考,具体内容如下 什么是链表 链表是有序的列表,但是它在内存中是存储如下 小结: 链表是以节点的方式来存储,是链式存储 每个节点包含data 域, next 域:指向下一个节点. 如图:发现链表的各个节点不一定是连续存储. 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 单链表(带头结点) 逻辑结构示意图如下 单链表的增删改应用实例 使用带head 头的单向链表实现——三国英雄排行榜管理完成对英雄人物的增删改查操作
-
java 数据结构单链表的实现
java 数据结构单链表的实现 单链表实现链表的打印及元素删除操作,链表的实现主要是next属性的定义,将一堆节点关联起来的.实现简单的链表如下: public class LinkNode { private int value; private LinkNode next; public LinkNode(int x) { value = x; } public LinkNode getNext(){ return next; } public void setNext(LinkNode n
-
java实现单链表之逆序
下面一段代码准确的介绍了java实现单链表逆序,具体内容就不做详解了,有需要的朋友可以直接拷贝了 package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedReverse { class Node{ int data; Node next; public Node(int data){ this.data = data; } } public static
-
java实现单链表、双向链表
本文实例为大家分享了java实现单链表.双向链表的相关代码,供大家参考,具体内容如下 java实现单链表: package code; class Node { Node next; int data; public Node(int data) { this.data=data; } } class LinkList { Node first; //头部 public LinkList() { this.first=null; } public void addNode(Node no) {
随机推荐
- vb.net操作注册表的方法分析【增加,修改,删除,查询】
- angularJS结合canvas画图例子
- Javascript获取当前时间函数和时间操作小结
- js弹性势能动画之抛物线运动实例详解
- 详解Javascript几种跨域方式总结
- Android控件之AnalogClock与DigitalClock用法实例分析
- PHP5的XML新特性
- C#中 城市线路图的纯算法以及附带求极权值
- SyntaxHighlighter自动识别并加载脚本语言 原创
- 当文本框的值发生改变时,触发事件,在IE中有效
- Android使用Theme自定义Activity进入退出动画的方法
- PHP SFTP实现上传下载功能
- jQuery增加、删除及修改select option的方法
- 解决rs.absolutepage=-1的问题
- 浅谈Java数组的一些使用方法及堆栈存储
- Android RecyclerView添加头部和底部实例详解
- Android中html.fromhtml的使用方法
- php中常量DIRECTORY_SEPARATOR用法深入分析
- kotlin和Java的相互调用示例详解
- Unity3D Shader实现贴图切换效果