java实现链表

今天和同学讨论时,他说java没有指针怎么实现链表。的确,在Java中没有指针。但是,Java中引用和C++中的引用有很大不同,而且具有一定指针的功能(过两天会总结)。所以,就在家用Java实现了一下链表这种数据结构。目前我想到了两种方法用Java实现链表:

1、Java允许类的定义中出现该类对象,所以可以通过对该类对象的引用实现链表。

2、可以通过定义一个基类,通过子类的向上转型。通过父类指针模拟C++中的指针类型,从而实现链表。

废话不多说,上代码:

方法1 Node.java:

package com.pasilo;

public class Node {

	private int data;
	private Node next;

	public Node(){}

	public Node(int data){
		this.data = data;
		this.next = new Node();
	}

	public int getData(){
		return this.data;
	}

	public void setData(int value){
		this.data = value;
	}

	public Node getNext(){
		return this.next;
	}

	public void setNewNext(int value){
		Node newNode = new Node(value);
		this.next = newNode;
	}

	public void setNext(Node node){
		this.next = node;
	}
}

方法1 List.java:

package com.pasilo;

public class List {

	private Node head;
	private Node current;

	public List(int data){
		this.head = new Node(data);
		current = head;
	}

	public void append(int value){
		current.setNewNext(value);
		current = current.getNext();
	}

	public void remove(int destation){
		Node pointer = this.head;
		for(int i=0;i<destation-1;i++){
			pointer = pointer.getNext();
		}
		Node temp = pointer.getNext().getNext();
		pointer.setNext(temp);
	}

	public void insert(int destation,int value){
		Node pointer = this.head;
		for(int i=0;i<destation-1;i++){
			pointer = pointer.getNext();
		}
		Node temp = pointer.getNext();
		Node newNode = new Node(value);
		pointer.setNext(newNode);
		newNode.setNext(temp);
	}

	public int at(int index){
		Node pointer = this.head;
		for(int i=0;i<index;i++){
			pointer = pointer.getNext();
		}
		return pointer.getData();
	}

	public void display(){
		Node pointer = this.head;
		while(current != pointer){
			System.out.println("data is:"+pointer.getData());
			pointer = pointer.getNext();
		}
		System.out.println("data is:"+pointer.getData());
		System.out.println("this is the end.");
	}

	public int size(){
		int size = 1;
		Node pointer = this.head;
		while(current != pointer){
			pointer = pointer.getNext();
			size++;
		}
		return size;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list = new List(4);
		list.append(4);
		list.append(1);
		list.append(2);
		list.insert(2, 10);
		list.display();
		list.remove(2);
		list.display();
		System.out.println(list.at(2));
		System.out.println("size of the list:"+list.size());
	}

}

未完待续..........

原文地址:http://blog.51cto.com/13047263/2070815

时间: 2024-08-28 11:32:32

java实现链表的相关文章

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 实现链表

链表相比数组操作更灵活,在空间效率方面比数组更有优势,虽然java中没有指针,但可以通过自定义类建立链表模型,进而实现链表. 分享下自己用java实现链表的过程: java代码: Node 类: package com.list.stack; /** * Setup Node class * @author gannyee * */ public class Node { //Declared element private Object element; //Declared next nod

Linked List Cycle leetcode java (链表检测环)

题目: Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using extra space? 题解: 这道题连带着II是很经典的,在看CC150时候,纠结这个问题纠结了很久.在读了很多网上资料还有书的讲解以及和别人讨论之后,对这个专题终于明白了. 这一问只需要判断链表是否有环. 当链表没有环时是很好判断的,让一个指针一直往后走,遇见null了自然就没有环. 而如

Java单链表、双端链表、有序链表实现

Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插入一个新的链接点,时间复杂度为O(1) deleteFirst:删除表头的链接点,时间复杂度为O(1) 有了这两个方法,就可以用单链表来实现一个栈了,见http://blog.csdn.net/a19881029/article/details/22579759 find:查找包含指定关键字的链接点

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://www.cnblogs.com/Starshot/p/6918569.html 链表的结构是由一个一个节点组成的,所谓链,就是每个节点的头尾连在一起.而单向链表就是:每个节点包含了当前节点的值和下一个节点引用.双向链表就是每个节点包含了当前节点的值和上下两个节点的引用.相对于数组结构,链表的增删效率会更加高. 这边文章主要讲怎么用Java实现一个简单的链表结构:单向无环链表.以及实现一些数据处理的方法. 首先,新建一个节点类(本次例子中的节点值都是字符串类型):

java对链表增删查改操作API

从c++方向搞点java副业.结果在静态链表这里绊了一跤.感谢巨人们的肩膀重见天日. 希望后来人少走些弯路. 废话少说,直接贴代码: 1.创建链表的节点类 public class Node { private Node node; private Object eleme; public void setEleme(Object eleme) { this.eleme = eleme; } public Node(){ this.eleme = null;node = null; } publ

JAVA实现链表面试题

这篇文章主要介绍了JAVA相关实现链表的面试题,代码实现非常详细,每一个方法讲解也很到位,特别适合参加Java面试的朋友阅读. 这份笔记整理了整整一个星期,每一行代码都是自己默写完成,并测试运行成功,同时也回顾了一下<剑指offer>这本书中和链表有关的讲解,希望对笔试和面试有所帮助. 本文包含链表的以下内容: 1.单链表的创建和遍历 2.求单链表中节点的个数 3.查找单链表中的倒数第k个结点(剑指offer,题15) 4.查找单链表中的中间结点 5.合并两个有序的单链表,合并之后的链表依然有

初学JAVA资料——链表

链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域. 相比于线性表顺序结构,操作复杂.由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn