链表逆序(JAVA实现)

题目:将一个有链表头的单向单链表逆序

分析:

  1. 链表为空或只有一个元素直接返回;
  2. 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继;
  3. 重复步骤2,直到q为空;
  4. 调整链表头和链表尾;

图解:

  以链表A->B->C->D为例,逆序此链表。

  0.初始状态                                                        1.2.3 循环部分

  p = head->next;                                              while(q!=null){

  q = head->next->next;                                      t = q->next;

  t = null;                                                            q->next = p;

                              p = q;

                                                                              q = t;

                           }

 

0.初始状态

1.第一次循环

2.第二次循环

3.第三次循环

4.q==null循环结束

   head->next->next = null;//设置链表尾

 head-next = p;//修改链表头

 

实现及测试代码

节点Node类:

复制代码

package linkList.reverse;/*** 链表节点* @author Administrator**/
public class Node {private Integer data;//节点数据域private Node next;//节点指针域public Integer getData() {return data;}public void setData(Integer data) {this.data = data;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}
}

复制代码

逆序方法:

复制代码

/*** * @param node 原始链表头节点* @return 逆序后链表头节点*/Node reverseList(Node head){//如果链表为空或只有一个元素直接返回if(head.getNext()==null||head.getNext().getNext()==null){return head;}Node p = head.getNext();Node q = head.getNext().getNext();Node t = null;while(q!=null){t = q.getNext();q.setNext(p);p = q;q = t;}//设置链表尾head.getNext().setNext(null);//修改链表头head.setNext(p);return head;}

复制代码

测试代码:

复制代码

//表头Node head = new Node();head.setData(-1);head.setNext(null);//定义指针Node p;p = head;//初始化链表数据[1~10]for(int i=1;i<=10;i++){Node q = new Node();q.setData(i);q.setNext(null);p.setNext(q);p = q;}//输出原始链表printList(head);System.out.println("");//输出逆序后的链表printList(reverseList(head));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs/c++缓冲区溢出,未初始化变量检查

缓冲区溢出(buffer overrun)是c/c开发中比较令人头痛的问题,vs2005中有若干编译选项 可以有效的帮助程序员定位这些问题: 1,/GS:优化模式下有效,检测缓冲区溢出,只能检测出覆盖了返回地址的情况. 2,/RTCs:优化模式下无效,检测缓冲区溢出 voidTest2() { charbuffer1[100]; …

java面试题36 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? ( )

java面试题36 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的&#xff1f; ( ) A args[0] "MyTest a b c" B args[0] "MyTest" C args[0] "a" D args[1] "b" 蒙蔽树上蒙蔽果&#xff0c;蒙蔽树下你和我 对于java命…

【微信网页直接下载app】微信跳转-微信浏览器中直接唤起本地浏览器和App

文档传送门&#xff1a;https://github.com/EthanOrange/wechat-redirectdemo&#xff1a; http://wxredirect.jslab.fun/call-app 转载于:https://www.cnblogs.com/xiaohuizhang/p/11377553.html

单例模式的八种写法比较

转:https://www.cnblogs.com/zhaoyan001/p/6365064.html 单例模式是最常用到的设计模式之一&#xff0c;熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式。但是除了这两种方式&#xff0c;本文还会介绍其他几种实现…

Unix操作系统目录存放内容

/Bin存放系统命令 /etc存放系统命令及配置文件的数据库 /lib存放C语言的库函数、数据库 /mnt存放可拆装的软件 /Tmp存放临时文件 /user存放用户目录 转载于:https://www.cnblogs.com/Ewin/archive/2008/12/22/1360111.html

java面试题37 关于对象成员占用内存的说法哪个正确?( )

java面试题37 关于对象成员占用内存的说法哪个正确&#xff1f;&#xff08; &#xff09; A 同一个类的对象共用同一段内存 B 同一个类的对象使用不同的内存段&#xff0c;但静态成员共享相同的内存空间 C 对象的方法不占用内存 D 以上都不对 蒙蔽树上蒙蔽果&#xff0c;…

.NET Framework学习笔记(十)

17.委托 .NET框架使用委托delegate来提供回调函数机制。 classSet{ private Object[] items; public Set(int numItems) { items new Object[numItems]; for (int i 0; i < numItems; i) { items[i] i; } }publicdel…

java面试题38 以下关于 abstract 关键字的说法,正确的是()

java面试题38 以下关于 abstract 关键字的说法&#xff0c;正确的是&#xff08;&#xff09; A abstract 可以与final 并列修饰同一个类。 B abstract 类中不可以有private的成员。 C abstract 类中必须全部是abstract方法。 D abstract 方法必须在abstract类或接口中。 …

GridView强制不换行

前提是不能设置GridView的列宽(可以设置表头的宽度代替列宽) 把下面代码加到Me.objGv.DataBind()下面 GridView表头强制不换行objGv.HeaderRow.Style.Add("word-break", "keep-all")GridView内容强制不换行Fori AsInteger0ToobjGv.Rows.Count -1Forj AsInt…

MySQL和SQL Server数据库基本语句总结(二)

接着上面的总结&#xff0c;这一篇主要是MySQL剩下的内容&#xff08;我用的不多&#xff0c;记下来&#xff0c;防止自己忘记&#xff09; 1.关于触发器 解释 类似于C中的事件触发&#xff0c;在一个事件发生后会执行里面的代码 &#xff08;before /after&#xff09; 语法…

Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较

转发:https://www.cnblogs.com/zx-bob-123/archive/2017/12/26/8118074.html 0. 前言 HashMap和HashTable的区别一种比较简单的回答是&#xff1a; &#xff08;1&#xff09;HashMap是非线程安全的&#xff0c;HashTable是线程安全的。 &#xff08;2&#xff09;HashMap的…

java面试题39 给定includel.isp文件代码片段,如下

java面试题39 给定includel.isp文件代码片段&#xff0c;如下&#xff1a; <% pageContext.setAttribute(“User”,”HAHA”);%> ______ // 此处填写代码 给定include2.jsp文件代码片段如下&#xff1a; <%pageContext.getAttribute(“User”)%> 要求运行i…

圣诞快乐啊

Let It Snow! Let It Snow! Let It Snow! 原由 *Sakura* 上載 马上就圣诞了&#xff0c;早早祝福大家&#xff0c;圣诞快乐啊&#xff01; 转载于:https://www.cnblogs.com/joypen/archive/2008/12/24/1693224.html

不用AJAX框架实现AJAX效果

AJAX( Asynchronous JavaScript and XML),即&#xff1a;javascript和XML; 是一种进行页面局部异步处理数据的技术&#xff0c;用AJAX向服务器发送请求和获取服务器返回的数据并且更新到界面中&#xff0c;不是整个页面的刷新&#xff0c;而是HTML页面中使用JAVASCRIPT创建XMLH…

Java 面试题及答案

JAVA基础 JAVA中的几种基本类型&#xff0c;各占用多少字节&#xff1f; 下图单位是bit,非字节 1B8bit String能被继承吗&#xff1f;为什么&#xff1f; 不可以&#xff0c;因为String类有final修饰符&#xff0c;而final修饰的类是不能被继承的&#xff0c;实现细节不允许…

java面试题40 当编译并运行下面程序时会发生什么结果()

java面试题40 当编译并运行下面程序时会发生什么结果&#xff08;&#xff09; 1 2 3 4 5 6 7 8 9 10 11 public class Bground extends Thread{ public static void main(String argv[]){ Bground b new Bground(); b.run(); } public void sta…

穷人最缺少的是什么?

法国一位年轻人很穷&#xff0c;很苦。后来&#xff0c;他以推销装饰肖像画起家&#xff0c;在不到十年的时间里&#xff0c;迅速跃身为法国50大富翁之列&#xff0c;成为一位年轻的媒体大亨。不幸&#xff0c;他因患上前列腺癌&#xff0c;1998年在医院去世。他去世后&#xf…

java面试题41 下面字段声明中哪一个在interface主体内是合法的? ()

java面试题41 下面字段声明中哪一个在interface主体内是合法的? &#xff08;&#xff09; A private final static int answer 42; B public static int answer 42; C final static answer 42; D int answer; 1、接口&#xff1a;一种把类抽象的更彻底&#xff0c;接…

java面试题42从以下哪一个选项中可以获得Servlet的初始化参数?

java面试题42从以下哪一个选项中可以获得Servlet的初始化参数? A Servlet B ServletContext C ServletConfig D GenericServlet 蒙蔽树上蒙蔽果&#xff0c;蒙蔽树下你和我 ServletContext对象&#xff1a;servlet容器在启动时会加载web应用&#xff0c;并为每个web应用…

asp.net如何生成图片验证码

新建一个页面image.aspx,添加命名空间&#xff1a; usingSystem.Drawing.Imaging;usingSystem.IO;然后在Page_load事件拷入如下代码&#xff1a; //生成4位的验证码stringtmp RndNum(4); HttpCookie a newHttpCookie("ImageV",tmp); Response.Cookies.Add(a…