单链表---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 ...
随机推荐
- AIX常用命令略记
■ 初始化端末时可能需要确认服务器端和端末时间是否匹配 ●cal 显示日历 ●date 显示服务前当前时间 ■ 显示当前目录,即显示当前所在目录的adress ●pwd(print workin ...
- Python数据结构-元祖
print()) print() #等价于: print('Tom is %d'%(5))
- python手记(48)
#!/usr/bin/env python # -*- coding: utf-8 -*- #http://blog.csdn.net/myhaspl #code:myhaspl@qq.com imp ...
- WPF界面设计技巧(7)—模拟电梯升降的缓动动画
原文:WPF界面设计技巧(7)-模拟电梯升降的缓动动画 如同Flash一样,WPF的亮点之一也在于其擅于表现平滑的动画效果,但以移动动画来说,仅凭简单的起始位置.目标位置,所产生的动画仍会非常生硬,这 ...
- 谷歌下解决Pop遮罩层无法遮挡滚动栏下问题
今天用pop的弹出窗体里,出现一个问题,当网页出现滚动栏里,不能遮挡住,解决Pop遮罩层无法遮挡滚动栏下问题. 可通过下载获取改动后的代码----->进入下载
- C# webservice初探
转载请注明出处Coder的不平庸:http://blog.csdn.net/pearyangyang/article/details/46348633 因为工作的终端曾经是直接对数据库进行操作,导致每 ...
- ZOJ Problem Set - 3829Known Notation(贪心)
ZOJ Problem Set - 3829Known Notation(贪心) 题目链接 题目大意:给你一个后缀表达式(仅仅有数字和符号),可是这个后缀表达式的空格不幸丢失,如今给你一个这种后缀表达 ...
- Win32 Windows规划 三
一.NMAKE 和 Makefile 1.1 NMAKE - 命令解释器. 依据Makefile文件里定义的脚本.完毕项目的编译等操作 1.2 Makefile - 定义编译.连接等脚本语言 1.3 ...
- Mongoose即使是简单的表查询
从我原来的博客尖,欢迎大家光临 http://www.hacke2.cn 像我这篇文章所说的基于Node.js + jade + Mongoose 模仿gokk.tv.当时停止开发是由于我深深的感觉到 ...
- WPF3D学习,立方体的绘制
原文:WPF3D学习,立方体的绘制 以此为一个好的开始吧!一直都太懒,坚持写文章是个不错的开始!碰巧最近在研究WPF3D这块的知识,也为了练练自己的写作水平,整理这篇文章.新手上路,多多关照! 本文先 ...