单链表---java实现
单链表优点:1.不需要预先给出元素个数。
2.单链表插入删除时不需要移动数据元素。
单链表缺点:1.每个节点有指针,空间利用率低。
2.单链表不支持随机读取数据。
Node.java
package com.sheepmu;
public class Node {
Object value;//结点的数据值
Node next;//下一个结点对象的引用
public Node(Object value, Node next) {//一般结点的构造函数
super();
this.value = value;
this.next = next;
}
public Node(Object value){ //!!!!
this(value,null);
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public String toString(){
return value.toString();
}
}
SingleLinkedList.java
package com.sheepmu;
public class SingleLinkedList{
private Node head;
private Node current;
private int size;
public SingleLinkedList(){
head=current=new Node(null);//初始时令head和current都是头指针,即下一结点为头结点,即数据域为空。
size=0;
}
public boolean isEmpty(){
return size==0;
}
public int getSize(){
return size;
}
// public void addToFirst(Object obj){//在表头添加
// Node newNode=new Node(obj);
// newNode.next=head;
// head=newNode;
// size++;
// }
public void addToLast(Object obj){//在表尾插入结点
Node newNode=new Node(obj);
current=head.next;
while(current.next!=null)
current=current.next;//得到当前尾结点
current.next=newNode;
newNode.next=null;
size++;
}
public void insert(int i,Object obj){// 单链表 指定位置前插入
Node newNode=new Node(obj);
Node prve=head;
current=head.next;
int j=0;
while(current!=null&&j<i){
prve=current;
current=current.next;
j++;
}
newNode.next=current;
prve.next=newNode;
size++;
}
public void delete(int i){//单链表删除指定位置
Node prve=head;
current=head.next;
int j=0;
while(current!=null&&j<i){
prve=current;
current=current.next;
j++;
}
prve.next=current.next;
size--;
}
public Object getValue(int i){//得到结点值
current=head.next;
int j=0;
while(current!=null&&j<i){
current=current.next;
j++;
}
return current.value;
}
public void print(){//遍历打印单链表
if(isEmpty())
System.out.println("链表为空");
else{
for(Node current=head.next;current!=null;current=current.next){
System.out.print(current.value+" ");
}
}
}
}
SingleLinkedListTest.java
package com.sheepmu;
/**
* 建立一个线性表,依次输入元素0,1,2...9;然后在第4个位置插入9 ,然后删除数据元素7。最后依次显示当前线性表元素。
* 采用单链表实现。
* @author SheepMu
*
*/
public class SingleLinkedListText {
public static void main(String[] args) throws Exception{
SingleLinkedList singleLinkedList=new SingleLinkedList();
System.out.println("初始线性表:");
for(int i=0;i<10;i++){
singleLinkedList.insert(i, new Integer(i));
}
singleLinkedList.print(); System.out.println("在位置4插入元素9后的线性表:");
singleLinkedList.insert(4, new Integer(9)); singleLinkedList.print(); // System.out.println("表头插入元素0后的线性表:");
// singleLinkedList.addToFirst(new Integer(0));
// singleLinkedList.print(); System.out.println("表尾插入元素0后的线性表:");
singleLinkedList.addToLast(new Integer(0));
singleLinkedList.print(); System.out.println("删除第5个元素后的线性表:");
singleLinkedList.delete(5);
singleLinkedList.print(); } }
单链表---java实现的更多相关文章
- 数据结构——单链表java简易实现
巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成 通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...
- 单链表Java实现
近期在复习基本数据结构,本文是单链表的Java实现,包含对单链表的实现插入删除查找遍历等.最后还实现了单链表的逆置. 实现了多项式相加,多项式相乘. 原文章及完整源码在这里 http://binhua ...
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- JAVA 链表操作:单链表和双链表
主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...
- 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...
- 用Java实现单链表的基本操作
笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 public class ListNode ...
- java单链表代码实现
用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...
- java实现单链表常见操作
一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...
- Java实现单链表的快速排序和归并排序
本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space ...
随机推荐
- android中更改spinner、AutoCompleteTextView切割线的颜色
话说去除切割线的方法找了非常久也没找到,最终发现了更改切割线的方法 spinner和AutoCompleteTextView提示列表中间有一条黑色的切割线.想要改变它的颜色值,就要重写style. 1 ...
- JavaScript 使用Document记录cookie
cookie对于我们使用者来说,有时帮助还是挺大的,比方对于一些不是特别重要的站点,比方公司的測试平台,每次登陆都要手动输入username和password 非常繁琐.所以为了更少的引入其他框架,就 ...
- SESC中的热量模拟器
SESC安装见前文 配置sesc支持热量模拟 ../sesc/configure --enable-power --enable-therm make 遇到问题: 1 找不到 liblevmar.a ...
- Berkeley DB 使用
http://www.ibm.com/developerworks/cn/linux/l-embdb/index.html UNIX/LINUX平台下的数据库种类非常多,参考资料1中 列举了其中的大部 ...
- Android之场景桌面(一)
声明:转载请务必注明出处,本文代码和主题仅供学习交流,请勿用于商业用途. 引言:最近Android场景桌面开始流行起来了,跟原始的Android桌面相比,场景桌面能逼真的模拟各种自然物体,并且通过点击 ...
- properties editor for eclipse安装使用
properties editor 是 Eclipse下编辑properties文件的插件,用来写国际化程序非常方便,自动保存为ASCII码,支持Unicode. 安装过程: 打开eclispe编辑器 ...
- Oracle表空间详解
Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...
- HDOJ 5276 YJC tricks time multimap
multimap的使用 YJC tricks time Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/262144 K ...
- HttpClient(联网)
抽样: void GameRequest::initRequset(const char* url, cocos2d::CCObject* pTarget, cocos2d::SEL_CallFunc ...
- android中listview分页载入数据
前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下. 首先说下listview的优化方案,这也是面试中常考的题目.优化方 ...