代码如下:

public interface ListInterface<T> {
public T getElem(int i);
public boolean insertElem(int i,T t);
public T deleteElem(int i); }
public class Node<T> {
public T data;
public Node<T> next;
public T getData(){
return data;
}
public void setData(T data){
this.data = data;
}
public Node<T> getNext(){
return next;
}
public void setNext(Node<T> next){
this.next = next;
} }
import java.io.*;
import java.util.*; public class Linklist<T> implements ListInterface<T> {
public Node<T> head;
public int length;
public Linklist(T[] at){//头插法建立单链表。
T t;
this.length = 11;
Node<T> p;
head = new Node<T>();
//head.next = null;
//Scanner scanner = new Scanner(System.in);
//T s = scanner.nextLine();
int i=0;
while(i<at.length){
t = at[i];
p = new Node<T>();
p.data = t;
p.next = head.next;
head.next = p;//头插法!
i++;
}
}
public Linklist(Node<T> head){
this.head = head;
}
public T getElem(int i){
int j = 0;
Node<T> n = head;
while(n != null){
if(j == i){
return n.getData();
}
n = n.getNext();
j++;
}
return null;
}
public boolean insertElem(int i,T t){
if(i<0 || i>length){
System.out.println("插入位置不合法!");
return false;
}else{
if(head==null && i==1){
head = new Node<T>();
head.setData(t);
length++;
return true;
}
else if(head!=null && i==1){
Node<T> tempNode = new Node<T>();
tempNode.setData(t);
tempNode.setNext(head);
head = tempNode;
length++;
return true;
}else{
Node<T> n = this.head;
int j = 1;
while(n!=null && j<i-1){
n = n.getNext();
j++;
}
Node<T> tempNode = new Node<T>();
tempNode.setData(t);
tempNode.setNext(n.getNext());
n.setNext(tempNode);
length++;
}
return true; }
}
public T deleteElem(int i){
if(head==null || i<1 || i>length){
System.out.println("删除位置不合法!");
return null;
}
T old;
if(head!=null && i==1){
old = head.getData();
head = head.getNext();
}else{
Node<T> n = this.head;
int j = 1;
while(n!=null && j<i-1){
n = n.getNext();
j++;
}
old = n.getNext().getData();
n.setNext(n.getNext().getNext());
}
length--;
return old;
}
public Node<T> getHead(){
return this.head;
}
public int getLength(){
return this.length;
}
public void setHead(Node<T> head){
this.head = head;
}
public void setLength(int length){
this.length = length;
}
public void display(){
Node<T> p;
int i = 0;
p = head.next;
while(p!=null){
System.out.print(p.data + " ");
p = p.next;
}
}
}
import java.util.*;
import java.io.*; public class LinkedlistTest { public static void main(String[] args) {
// TODO 自动生成的方法存根
Integer[] arr = new Integer[10];
Scanner scan = new Scanner(System.in);
for(int i=0; i<10; i++){
arr[i] = scan.nextInt();
}
Linklist<Integer> list = new Linklist<Integer>(arr);
list.display();
System.out.println();
System.out.println(list.getElem(5));
System.out.println(list.insertElem(5, 78));
list.display();
System.out.println();
System.out.println("要删除的元素是:"+list.deleteElem(5));
list.display(); } }

链表的实现(Java语言描述)的更多相关文章

  1. 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)

    三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述) 用经典矩阵转置算法和普通的三元组矩阵转置在时间复杂度上都是不乐观的.快速转置算法在增加适当存储空间后实现快速转置具体原理见代码注释部 ...

  2. 数据结构(java语言描述)

    概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...

  3. 数据结构(Java语言描述)-第一章:概述

    第一章 概述 1.0 序言 自己为啥要学数据结构嘞,我觉得主要有以下三个原因: 前段时间在看并发编程时,发现aqs,corrunthashmap等底层都用到了数据结构,主要的有队列,还有链表,学习数据 ...

  4. 利用栈实现算术表达式求值(Java语言描述)

    利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...

  5. 【数据结构】之二叉树(Java语言描述)

    有关树的一些基础知识点请参考[这篇文章]. 本文主要记录Java语言描述的二叉树相关的一些操作,如创建.遍历等. 首先,我们需要一个表示树中节点的数据结构TreeNode,代码如下: public c ...

  6. 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)

    数据结构与抽象 Java语言描述 第4版 目录 前言引言组织数据序言设计类P.1封装P.2说明方法P.2.1注释P.2.2前置条件和后置条件P.2.3断言P.3Java接口P.3.1写一个接口P.3. ...

  7. 《数据结构与算法分析-Java语言描述》 分享下载

    书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark A ...

  8. 【数据结构】之链表(Java语言描述)

    以前写过一篇帖子,记录了链表在C语言中的描述代码.C语言中没有链表的直接实现,因此,我们需要自己编写代码实现.请参考[我的这篇文章]. Java中默认为我们提供了链表的API—— LinkedList ...

  9. 数据结构--Java语言描述

    本篇文章是为了记录自己在学习数据结构时的笔记,会对常见的数据结构做基本的介绍以及使用Java语言进行实现.包括 动态数组 栈 队列 链表 二分搜索树 优先队列和堆 线段树 Trie树 并查集 AVL树 ...

随机推荐

  1. 从Windows XP系统迁移到Windows 7,Windows 8开始

    Microsoft在2014年4月8日结束了Windows XP的支持.您的公司准备好了吗?如果您还没有迁移到Windows 7或8,那就要抓紧时间了.从现在起将不再向XP系统提供安全修补程序,而仍然 ...

  2. netfilter分析

    转自:http://blog.sina.com.cn/s/blog_a31ff26901013n07.html 一.概述 1. Netfilter/IPTables框架简介 Netfilter/IPT ...

  3. IDE、SATA、SCSI、SAS、FC、SSD硬盘类型介绍[zz]

    目前所能见到的硬盘接口类型主要有IDE.SATA.SCSI.SAS.FC等等. IDE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘.SCSI是"小型计算机系 ...

  4. .net微信公众号开发——快速入门

    作者:王先荣 最近在学习微信公众号开发,将学习的成果做成了一个类库,方便重复使用. 现在微信公众号多如牛毛,开发微信的高手可以直接无视这个系列的文章了. 使用该类库的流程及寥寥数行代码得到的结果如下. ...

  5. SQL SERVER2012中使用游标来备份数据库

    在SQL SERVER中,添加JOB,可以使用以下语句设置定期备份数据库. DECLARE @name VARCHAR(50)--databasename DECLARE @path VARCHAR( ...

  6. 支持取消操作和暂停操作的Backgroundworker

    这也是今天讨论的话题.取消是默认就支持的,而暂停则默认不支持.但通过ManualResetEvent可以对其进行干预. using System; using System.Collections.G ...

  7. Android表情功能

    Android表情功能 标签(空格分隔): 未分类 转载自:android edittext插入表情(基于socket方式),并对文中不正确的内容进行整理和修正 [TOC] 涉及知识点: Androi ...

  8. Openvswitch原理与代码分析(8): 修改Openvswitch代码添加自定义action

    有时候我们需要自定义一些自己的action,根据包头里面的信息,做一些自己的操作.   例如添加一个action名为handle_example   第一.修改ofp-actions.c文件   首先 ...

  9. 详细介绍windows下使用python pylot进行网站压力测试

    windows下使用python进行网站压力测试,有两个必不可少的程序需要安装,一个是python,另一个是pylot.python是一个安装软件,用来运行python程序,而pylot则是pytho ...

  10. SecureCrt设置字符编码

    SecureCrt设置字符编码,参考:http://www.2cto.com/os/201412/365535.html