单链表---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 ...
随机推荐
- jQuery拖动调整表格列宽度-resizableColumns
实现鼠标可拖动调整表格列宽度 如图: 一.引入文件: <script src="/js/jquery-1.8.0.min.js" type="text/javasc ...
- NGUI使用教程(3) 使用外部图片制作Atlas(图集)
在实际操作之前有几个概念先弄清一下 Atlas:图集,把美术给你提供的素材,用 NGUI 的 Atlas Maker 工具.合成一张图片(准确的说,还同一时候生成了prefab.mat ). Spri ...
- /etc/sysconfig/network-scripts/ifcfg-eth0
以下各值常见于所有的基本配置文件中:* DEVICE=name,这里name是物理设备的名字(动态分配的PPP设备应当除外,它的名字是“逻辑名”.* IPADDR=addr, 这里addr是IP地址. ...
- Java EE (11) - 影响性能的因素
垂直层(Tier)影响性能的因素 资源层数据库性能通常考虑以下方面的优化(MySQL为例):--使用哪种存储引擎:MyISAM vs. InnoDB, MERGE, MEMORY, Federated ...
- LeetCode——Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- Android 照相功能
使用内置的Camera 应用程序捕获图像 探索Android 所提供的内置功能,内置的图像捕获与存储功能为Android 上全部媒体功能提供了一个非常好的切入点,为我们在以后的章 ...
- Android 下拉刷新上拉载入效果功能
应用场景: 在App开发中,对于信息的获取与演示.不可能所有将其获取与演示,为了在用户使用中,给予用户以友好.方便的用户体验,以滑动.下拉的效果动态载入数据的要求就会出现. 为此.该效果功能就须要应用 ...
- 上市ASCII 表省内发现!
表格来自,这里 扩展码表:
- C++经典面试题(二)
近期看一些面试题,认为假设自己被问到了,并不能非常利落的回答出来. 一是从来没有这个意识,二是没有认真的梳理下. 以下对这些题做出分析,哈!个人能力有限,当中难免有疏漏,欢迎大家补充咯. 11.引用与 ...
- 局域网连接SQL Server数据库配置
首先要保证两台机器位于同一局域网内,然后打开配置工具→SQL Server配置管理器进行配置.将MSSQLSERVER的协议的TCP/IP的(IP1.IP2)TCPport改为1433,已启用改为是. ...