Java实现单链表
来源:互联网 发布:java gps漂移过滤算法 编辑:程序博客网 时间:2024/06/04 23:36
Java语言实现的单链表,只实现了基本功能。
单链表的结点由存放数据元素的数据域和存放后继结点地址的指针域组成。java中由于不存在指针,指针域应存放后继结点的引用。
节点类:
/** * 节点类 * @param <T> */public static class Node<T> {private T value;private Node<T> next;public Node(T value, Node<T> next) {this.value = value;this.next = next;}public Node(T value){this(value, null);}}
完整代码:
public class SingleLinkedList<T> {/** * 节点类 * @param <T> */public static class Node<T> {private T value;private Node<T> next;public Node(T value, Node<T> next) {this.value = value;this.next = next;}public Node(T value){this(value, null);}}private Node<T> head;public SingleLinkedList() {head = new Node<T>(null);}/** * 单链表添加元素,使用头插法 * @param e 要插入的元素 * @return 正确插入返回true */public boolean add(T e) {addFirst(e);return true;}/** * 单链表头插法 * @param e 要插入元素 */public void addFirst(T e){Node<T> newNode = new Node<T>(e, null);if (size()==0) {head.next = newNode;} else {Node<T> temp = head.next;head.next = newNode;newNode.next = temp;}}/** * 单链表尾插法 * @param e 要插入的元素 */public void addLast(T e){Node<T> newNode = new Node<T>(e, null);Node<T> temp = head;while(temp.next!=null){temp = temp.next;}temp.next = newNode;}/** * 返回单链表的大小 * @return 单链表元素的个数 */public int size() {int i = 0;Node<T> node = head;while (node.next != null) {i++;node = node.next;}return i;}/** * 得到某一位置的元素 * @param index 下标 * @return 指定下标的元素 */public T get(int index){if(head==null){return null;}if(index>size()-1||index<0){return null;}Node<T> temp = head.next;int i=0;while(temp!=null){if(index==i){return temp.value;}i++;temp = temp.next;}return null;}/** * 在指定下标处插入元素 * @param e 带插入元素 * @param index 指定下标 * @return */public boolean insert(T e, int index){validateindex(index);Node<T> newNode = new Node<T>(e, null);Node<T> temp = head;int i=0;while(temp!=null){if(index==i){newNode.next = temp.next;temp.next = newNode;return true;}i++;temp = temp.next;}return false;}/** * 删除指定下标的元素 * @param index * @return */public boolean remove(int index){validateindex(index);Node<T> temp = head;Node<T> q;int i=0;while(temp!=null){if(index==i){q = temp.next;temp.next = q.next;}i++;temp = temp.next;}return true;}/** * 判断下标是否在正常范围内 * @param index 下标 * @return 在0~size-1之间为正常,返回true,否则false */private boolean validateindex(int index) {if(index<0||index>=size()){throw new RuntimeException("下标越界: "+index);}else{return true;}}@Overridepublic String toString() {String str = "[ ";for (int i=0;i<size();i++) {str = str + get(i) + " ";}str = str + "]";return str;}}
测试如下:
public static void main(String[] args) {//头插法SingleLinkedList<String> list = new SingleLinkedList<String>();list.add("1");list.add("2");list.add("3");list.add("4");System.out.println(list.toString());list.insert("X", 2);System.out.println(list.toString());list.remove(2);System.out.println(list.toString());}
0 0
- 【算法数据结构Java实现】Java实现单链表
- java实现单链表
- Java实现单链表
- java--实现单链表
- Java单链表的实现
- java实现单链表
- java实现单链表
- 单链表java语言实现
- 单链表之Java实现
- java单链表实现
- 单链表操作java实现
- 单链表---java实现
- Java实现单链表
- Java实现单链表
- java语言实现单链表
- 单链表 java实现
- 用java实现单链表
- Java 实现单链表反序
- Android 源码目录及其作用
- message sent to deallocated instance 除錯
- 【深入Java虚拟机】之四:类加载机制
- android activity动画小记
- jQuery 入门教程(5): 显示/隐藏内容
- Java实现单链表
- 405 Method Not Allowed on ajax PUT
- PyMongo基本使用
- 【深入Java虚拟机】之五:多态性实现机制——静态分派与动态分派
- Use Named Pipes and Shared Memory for inter process communication with a child process or two
- php中使用url传递数组
- 【深入Java虚拟机】之六:Java语法糖
- archlinux的安装
- Mat, IplImage, CvMat, Cvarr关系及元素获取