单链表java简易实现

巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成  通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下

package com.shine.test.datastruct;

/**
 * 简易链表
 *
 * @author SHINE
 *
 * @param <E>
 */
public class LinkList<E> {

	private Node head, tail;
	private int size = 0;

	protected class Node<E> {
		E data;
		Node next;
	}

	public LinkList() {
		head = new Node();
		head.next = null;
		tail = new Node<E>();
	}

	public void insert(E e, int index) {
		Node newNode = new Node<E>();
		newNode.data = e;

		Node before = head;
		Node temp = head.next;
		while (index >= 0) {
			if (index == 0) {
				before.next = newNode;
				newNode.next = temp;
				size++;
				break;
			}
			before = temp;
			temp = temp.next;
			index--;
		}
	}

	public void add(E e) {
		Node node = new Node();
		node.data = e;
		node.next = null;
		if (head.next == null) {
			head.next = node;
		}
		tail.next = node;
		tail = node;
		size++;
	}

	public E get(int index) {
		if (index > size - 1) {
			return null;
		}
		Node temp = head.next;
		while (index >= 0) {
			if (index == 0) {
				return (E) temp.data;

			}
			temp = temp.next;
			index--;
		}
		return null;
	}

	public E getFirst() {
		return get(0);
	}

	public E getLast() {
		return get(size - 1);
	}

	public void remove(E e) {
		Node before = head;
		Node temp = head.next;
		while (temp != null) {
			if (temp.data.equals(e)) {
				before.next = temp.next;
				size--;
				break;
			}
			before = temp;
			temp = temp.next;
		}
	}

	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer();
		Node temp = head.next;
		while (temp != null) {
			sb.append(temp.data + "->");
			temp = temp.next;
		}
		return sb.toString();
	}

	public int getLength() {
		return size;
	}
}

  

原文地址:https://www.cnblogs.com/lihuiupupup/p/8799268.html

时间: 2024-10-28 22:51:11

单链表java简易实现的相关文章

单链表Java实现

单链表的实现需要定义两个类,一个是Node类,存储了节点的数据值以及后继节点的引用.另外一个类就是list,用于存储这些Node节点.单链表的插入和删除操作有两种方法:头结点插入(删除)和末节点插入(删除).无论是头结点插入还是末节点插入,需要考虑的特殊情况是如果链表是空的话,方法适合也适合.同时,如果链表是空的话,需要更新tail的值为指向插入的节点.无论是头结点删除还是末节点删除,首先检测链表大小,如果为空的话,输出提示信息,不做其他操作.另外还需要考虑链表只有一个节点的情况.总而言之,头结

数据结构----顺序表与单链表(JAVA)

下面为学习顺序表和单链表的一些基本操作函数: 1 public class SeqList<T> extends Object { 2 protected int n; 3 protected Object[] element; 4 5 public SeqList(int length) { 6 this.element = new Object[length]; 7 this.n = 0; 8 } 9 10 public SeqList() { 11 this(64); 12 } 13 1

数据结构复习--java实现单链表基本操作

单链表的基本操作包括建立单链表.查找运算(按序查找和按值查找).插入运算(前插和后插)和删除运算.下面给出具体的java实现程序: package com.zpp.test; //首先创建一个节点类 public class Node { private Node next; //指针域 private int data;//数据域 public Node( int data) { this. data = data; } } package com.zpp.test; public class

JAVA实现具有迭代器的线性表(单链表)

一,迭代器的基本知识: 1,为什么要用迭代器?(迭代:即对每一个元素进行一次“问候”) 比如说,我们定义了一个ADT(抽象数据类型),作为ADT的一种实现,如单链表.而单链表的基本操作中,大部分需要用到依次遍历单链表中的每一个元素.一般而言,我们就是用for循环来实现遍历,这样,当你新增一个对单链表的操作并需要使用遍历时,你就得重新写一个for循环而实现遍历.那么,为什么不将迭代(遍历)作为一种基本的ADT操作(基本的ADT操作如:新增一个元素.删除一个元素)呢?于是,迭代器就出场了. 2,鉴于

java 单链表的实现

package liaobiao;//链表测试public class Node { private int value; private Node next; //存放下一个节点的指针 //构造方法,进行传参 public Node(int value){ this.value = value; } public Node(){ } //像链表的尾部加入元素,需要先找到最后一个节点 public void addNode(Node n ){ //需要先找到最后一个节点 Node node =t

Java数据结构-线性表之单链表LinkedList

线性表的链式存储结构,也称之为链式表,链表:链表的存储单元可以连续也可以不连续. 链表中的节点包含数据域和指针域,数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个头结点和头指针的区别: 头指针: 指向链表的第一个节点的指针,若链表有头结点,则是指向头结点的指针: 头指针具有标识作用,所以常用头指针作为链表的名字: 不论链表是否为空,头指针都不为空: 是链表的必要元素. 头结点: 头结点是为了操作的统一和方便而设立的,放在第一个元素节点的前面,其数据域一般无意

单链表是否有环的问题解决与讨论(java实现)

单链表是否有环的问题经常在面试中遇到,一般面试中会要求空间为O(1);再者求若有环,则求环产生时的起始位置. 下面采用java实现. //单链表class ListNode{ int val; ListNode next; ListNode(int x){ val=x; next=null; } } public class SearchCycleNode{ ListNode equalListNode=null;//来记录判断有环时出现的相等的时的节点,姑且叫"相遇"节点. //从&

java单链表代码实现

用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String name; private Node next; public Node(String name){ this.name=name; } public void setname(String name){ this .name = name; } public String getname(){

Java 实现简答的单链表的功能

作者:林子木  博客网址:http://blog.csdn.net/wolinxuebin 参考网址:http://blog.csdn.net/sunsaigang/article/details/5751780 描述:使用java实现简答的单链表的功能 定义了一个MyList类 包含的函数: getHead()返回头指针: isEmpty() 判断是否为空: addFirst(T element)在链表的头部加入元素: addLast(T element)在链表的尾部加入元: add(T fi