链表逆序(JAVA实现)
题目:将一个有链表头的单向单链表逆序
分析:
- 链表为空或只有一个元素直接返回;
- 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继;
- 重复步骤2,直到q为空;
- 调整链表头和链表尾;
图解:
以链表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));
链表逆序(JAVA实现)的更多相关文章
- 链表逆序,java实现
package com.cskaoyan.linkedlist; //反转数组 public class LinkedListDemo2 { public static Node reverse(No ...
- Reverse Linked List II 单向链表逆序(部分逆序)
0 问题描述 原题点击这里. 将单向链表第m个位置到第n个位置倒序连接.例如, 原链表:1->2->3->4->5, m=2, n =4 新链表:1->4->3-& ...
- ZT 链表逆序
链表逆序 原帖地址http://blog.csdn.net/niuer09/article/details/5961004 分类: C/C++2010-10-23 17:23 18425人阅读 评论( ...
- C# 单向链表 逆序(递归)
static void Main(string[] args) { while (true) { LinkedList L = new LinkedList(); L.Add(new Node(&qu ...
- 链表逆序---python
class ListNode: Value = '' # 节点要储存的值,因为Python是弱类型,因此无需传入泛型 Next = None # 下一个节点,初始化时为空值 def __init__( ...
- 【云栖社区001-数据结构】如何实现一个高效的单向链表逆序输出(Java版)
如题 动手之前,发现自己很擅长用C语言来写链表. 不过,既然自己做的是Java开发,那么还是用Java实现这个算法吧:毕竟,以后的若干年里都差不多要跟Java打交道了. 于是,先将Java版的链表自学 ...
- 剑指Offer03 逆序输出链表&链表逆序
多写了个逆序链表 /************************************************************************* > File Name: ...
- 基于visual Studio2013解决面试题之0504单链表逆序
题目
- C语言两个升序递增链表逆序合并为一个降序递减链表,并去除重复元素
#include"stdafx.h" #include<stdlib.h> #define LEN sizeof(struct student) struct stud ...
随机推荐
- 简单说说PHP优化那些事
我们在编写程序时,总是想要使自己的程序占用资源最小,运行速度更快,代码量更少.往往我们在追求这些的同时却失去了很多东西.下面我想讲讲我对PHP优化的理解.优化的目的是花最少的代价换来最快的运行速度与最 ...
- Android 下log的使用总结
Android 下log的使用总结 一:在源码开发模式下 1:包含头文件: #include <cutils/log.h> 2:定义宏LOG_TAG #define LOG_TAG &qu ...
- Java连接MySQL数据库及简单操作代码
1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘, ...
- JAVA调用易信接口向指定好友推送消息(一)背景需求
众所周知,中国电信内部一直使用易信群进行交流 各种工作交流都在易信群里面沟通 包括投诉处理,障碍报修,拍照上传 最重要的就是每天甚至每个时点的指标完成情况的通报 所以只能用4个字来形容 String ...
- ASP.NET MVC @helper使用说明
简单的 @helper 方法应用场景 Razor中的@helper语法让您能够轻松创建可重用的方法,此方法可以在您的视图模板中封装输出功能.他们使代码能更好地重用,也使代码更具有可读性. 在我们定义@ ...
- 浏览器检测是否安装flash插件,若没有安装,则弹出安装提示
说白了其实就是在html中前途flash的使用代码 <!-- html嵌入flash,检测浏览器是否安装flash插件,并提示安装.--> <object type=&q ...
- acdream 1210 Chinese Girls' Amusement (打表找规律)
题意:有n个女孩围成一个圈从第1号女孩开始有一个球,可以往编号大的抛去(像传绣球一样绕着环来传),每次必须抛给左边第k个人,比如1号会抛给1+k号女孩.给出女孩的人数,如果他们都每个人都想要碰到球一次 ...
- Java [Leetcode 328]Odd Even Linked List
题目描述: Given a singly linked list, group all odd nodes together followed by the even nodes. Please no ...
- 在VC中显示和处理图片的方法
落鹤生 发布于 2011-10-21 09:12 点击:344次 来自:blog.csdn.net/mengaim_cn 几种用GDI画图的方法介绍. TAG: GDI 法1:这个方法其实用的是 ...
- 关于web安全
从技术到安全, 这是一个趋势. 以前追求的是比较炫酷的技术, 等实现过后发现, 自己还能做什么. 炫技完了之后,差不多就该到悟道的时候了. 用户安全, 就是一个很大的禅. 苹果拒绝 FBI, goog ...