单链表的java实现

链表是由一组任意的存储单元存储线性表的数据单元,链表由两部分组成:结点(数据域)、指针域。整个链表的存取必须从头指针开始,头指针指向第一个结点,最后一个结点指向为空。java中没有指针概念,但是java中有引用,可以用引用代替指针。

下面是我写的一个例子:

package com.test.linked;

public class newlinkList {

	public class Node{
		private Object data;
		private int index;
		private Node next;
		public Node(int index,Object data){
			this.index=index;
			this.data=data;
		}
		public String toString(){

			return index+"...."+data.toString();

		}
	}
	private Node header;
	private int size=0;
	/**
	 * 在头插入
	 * @param index
	 * @param o
	 */

	public void insertFirst(int index,Object o){
		if(header==null){
			header=new Node(0,0);
		}
		Node node=new Node(index,o);
		node.next=header.next;
		header.next=node;
		size++;
	}
	/**
	 * 在特定位置插入(在该位置后面插入)
	 * @param key
	 * @param index
	 * @param o
	 */
	public void insertByKey(int key,int index,Object o){
		Node p=findList(key);
		Node node=new Node(index,o);
		node.next=p.next;
		p.next=node;
		size++;
		System.out.println("insertByKey finished");
	}
	/**
	 * 在头删除
	 */
	public void deleteFirst(){
		if(size>0){
			header.next=header.next.next;
			size--;
		}else{
			System.out.println("链表已为空!");
		}
	}
	public int size(){
		return size;
	}
	/**
	 * 删除特定位置元素
	 * @param key
	 */
	public void deleteByKey(int key){
		Node previous=header;
		Node p=header;
		while(p.index!=key){
			if(p.next==null){
				System.out.println(" can't find!");
			}else{
				previous=p;
				p=p.next;
			}
		}
		previous.next=previous.next.next;
		System.out.println(previous);

	}
	/**
	 * 链表展示
	 */
	public void displayList(){
		Node p=header;
		System.out.println("List (header..last) ");
		while(p.next!=null){

			p=p.next;
			System.out.println(p.toString());
		}
	}
	/**
	 * 通过key查找,可扩展,如果key相同多个node通过equals方法找到对象
	 * @param key
	 * @return
	 */
	public Node findList(int key){
		Node p=header;
		while(p.index!=key){
			if(p.next==null){
				System.out.println(" can't find!");
				return null;
			}else{
				p=p.next;

			}

		}
		System.out.println("find this Node");
		return p;
	}
		public static void main(String[] args){
			newlinkList list=new newlinkList();
			list.insertFirst(1,"NO.1");
			list.insertFirst(2,"NO.2");
			list.insertFirst(3,"NO.3");
			list.displayList();
			//list.deleteFirst();
			//System.out.println(list.findList(2).toString());
			//list.displayList();
			list.insertByKey(2, 6, "I'm be inserted");
			//list.displayList();
			list.deleteByKey(6);
			list.displayList();
		}
}

输出结果:

List (header..last)
3....NO.3
2....NO.2
1....NO.1
find this Node
insertByKey finished
2....NO.2
List (header..last)
3....NO.3
2....NO.2
1....NO.1
时间: 2024-11-20 21:57:38

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

数据结构----顺序表与单链表(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代码

据说单链表反转问题面试中经常问,而链表这个东西相对于数组的确稍微难想象,因此今天纪录一下单链表反转的代码. 1,先定义一个节点类. 1 public class Node { 2 int index; 3 Node next; 4 5 public Node(int index, Node next) { 6 this.index = index; 7 this.next = next; 8 } 9 } 2,我一共写了三种方法 (1)迭代法.先将下一节点纪录下来,然后让当前节点指向上一节点,再将

两个有序单链表合并成一个有序单链表的java实现

仅作为备注, 便于自己回顾. import java.util.Arrays; public class MergeSort { public static class LinkedNode<V extends Comparable<V>> { public V value; public LinkedNode<V> next; public LinkedNode(V value) { this.value = value; } public LinkedNode(V

详谈单链表的有关操作集锦~

1.单链表    在 Java 中没有显式的指针类型,然而实际上对象的访问就是使用指针来实现的,即在Java 中是使用对象的引用来替代指针的.因此在使用 Java 实现该结点结构时,一个结点本身就是一个对象.结点的数据域 data 可以使用一个 Object 类型的对象来实现,用于存储任何类型的数据元素,并通过对象的引用指向该元素:而指针域 next 可以通过节点对象的引 用来实现.      单链表结点结构是结点的一种最简单的形式,除此之外还有其他不同的结点结构,但是这些结点结构都有一个数据域

数据结构之线性表-链式存储之单链表(一)

本人文笔较差,语文从来不及格,基础不好,写此类文章仅供自己学习,理解队列及其他知识,高手大神请略过.参考书籍 <数据结构与算法分析-Java语言描述 1.1 单链表简介 线性表的最大的缺点就是插入和删除操作需要移动大量的元素,这是它在内存中的连续存储结构造成的.为了弥补这2个缺点,就出现了链表,即线性表的链式存储. 链表是由一系列的几点组成,这些节点不必在内存中相连.这就意味着元素可以存在内存未被占用的任意位置.如图 这个存储可以想象成元素在内存中成三维空间存储,他们之间可没有像数组那样的下标标

数据结构复习--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

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