代码如下:

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. C#转C++的一点分享

    前几天看到这样一篇博客<那些年·我们读过的专业书籍>,里面列了很多大家认为很好的书,加上自己在自学C++的工程中也看了不少书,感觉并不是所有的书都值得花时间去看的,毕竟很多人一年下来也看不 ...

  2. linux内核设计模式

    原文来自:http://lwn.net/Articles/336224/ 选择感兴趣内容简单翻译了下: 在内核社区一直以来的兴趣是保证质量.我们需要保证和改善质量是显而易见的.但是如何做到却不是那么简 ...

  3. libev代码

    就是贴上来: ev.c: /* * libev event processing core, watcher management */ /* this big block deduces confi ...

  4. OpenCV】透视变换 Perspective Transformation(续)

    载分 [OpenCV]透视变换 Perspective Transformation(续) 分类: [图像处理] [编程语言] 2014-05-27 09:39 2776人阅读 评论(13) 收藏 举 ...

  5. Oracle Essbase入门系列(四)

    成员存储类型 除了大纲计算,维度成员的另一项重要属性是存储类型,存储类型决定维度成员相关单元格的物理存储方式.在维库中编辑成员的[Data Storage]属性,下拉菜单中可选的5种,再加上Share ...

  6. Codeforces Round #271 (Div. 2)题解【ABCDEF】

    Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...

  7. Android Studio如何引用外部Library工程

    参考:    http://stackoverflow.com/questions/16588064/how-do-i-add-a-library-project-to-the-android-stu ...

  8. std::bind和std::function

    std::bind 用于绑定一个函数,返回另外一种调用方式的函数对象 ,可以改变参数顺序 和个数,特别是在多线程的程序中,经常用它将函数进行包装,然后打包发送给工作线程,让工作线程去执行我们的任务. ...

  9. 安装scapy遇到的问题

    1. Mac平台 在mac上安装scapy可以说是困难重重,一来因为scapy实在有些小众和老旧,再加上安装说明文档都是python2.5 也没有详细说明一些安装问题. 折腾了大概三个小时之后终于解决 ...

  10. Xshell中文乱码问题

    1.  先查看当前使用的语言: echo $LANG 2.  查看系统的语言安装包: locale 3.  如果没有中文安装包(包含zh_CN字样),需要网络或者自己上传安装包,安装 4.  有了中文 ...