单链表优点: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实现的更多相关文章

  1. 数据结构——单链表java简易实现

    巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成  通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...

  2. 单链表Java实现

    近期在复习基本数据结构,本文是单链表的Java实现,包含对单链表的实现插入删除查找遍历等.最后还实现了单链表的逆置. 实现了多项式相加,多项式相乘. 原文章及完整源码在这里 http://binhua ...

  3. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  4. JAVA 链表操作:单链表和双链表

    主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...

  5. 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  6. 用Java实现单链表的基本操作

    笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 public class ListNode ...

  7. java单链表代码实现

    用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...

  8. java实现单链表常见操作

    一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...

  9. Java实现单链表的快速排序和归并排序

    本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space ...

随机推荐

  1. coding 除了托管外,还能进行团队协作.

    coding 除了托管外,还能进行团队协作. oschina 也是非常不错的.

  2. 微端 代码project as air 分享

    分享 ^_^ 1. 使用 air , as . 2. 微端下载和更新技术 成功上线棋牌游戏.它可用于传统的游戏开发. 地址: http://download.csdn.net/detail/stone ...

  3. struts(二)——struts框架实现的基本原理

    上一篇文章,我们介绍了MVC框架的基本原理,并指出了这个基本框架中存在大量if…else的问题.今天我们来介绍一下struts框架,让struts解决这个问题. 首先,看一下粗略的时序图: Actio ...

  4. Java EE (8) -- Java EE Patterns

    Java EE 模式目录由以下三个层组成: –     整合层(4) –     业务层(9) –     表示层(8) 涉及 Java EE 平台代码与其它类型应用程序或遗留系统的集成: 服务激活器 ...

  5. WebForm / MVC 源码分析

    ASP.NET WebForm / MVC 源码分析   浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm ...

  6. hdu2457 Trie图+dp

    hdu2457 给定n个模式串, 和一个文本串 问如果修改最少的字符串使得文本串不包含模式串, 输出最少的次数,如果不能修改成功,则输出-1 dp[i][j] 表示长度为i的字符串, 到达状态j(Tr ...

  7. Linux日志清除

    因为数据要求.经常需要抓住和筛选过滤数据,大概花了7 8个月.改变了机旁数据.重新开始,发现"No space left on device" 解决方法: 直接删除日志(简单粗暴) ...

  8. lua简洁的功能(两)

    Lua中的函数带有词法定界的第一类值. 第一类值: 在Lua中,函数和其它值(数值,字符串)一样,函数能够被存放在变量中,也存放在表中, 能够作为函数的參数,还能够作为函数的返回值. 词法定界:被嵌套 ...

  9. PM俱乐部之旅7-弱活着

     有些人认为,最终我们放松一点时间,有意想不到的事情发生--公司组织结构调整. 公司由于业务范围调整,所以要进行对应的组织结构调整.PMO部门也随之重组,项目经理俱乐部的活动改成项目交流会,请项目 ...

  10. Android呼叫开发系列WebService

    我在学习Android第一个问题是在发展进程中遇到Androidclient究竟是怎么用server与数据库交互它?问题是,我有初步接触Android这困扰了我一个非常大的问题.天直到几年前,我突然想 ...