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(){
			return this.name;
		}
		public void addnode(Node newnode){
			if(this.next==null)
				this.next=newnode;
			else
				this.next.addnode(newnode);
		}
		public void printnode(){
			if(this.next!=null){
				System.out.print(this.name);
				System.out.print("——>");
			}
			else
				System.out.println(this.name);
			if(this.next!=null)
				this.next.printnode();
		}
		public boolean searchnode(String name){
			if(this.name.equals(name)){
				return true ;
			}
			else{
				if(this.next!=null){
					return this.next.searchnode(name) ;
				}
				else{
					return false ;
				}
			}
		}
		public void deleteNode(Node preNode,String name){
			if(this.name.equals(name)){
				preNode.next = this.next ;
			}else{
				this.next.deleteNode(this,name) ;
			}
		}
	}
	private Node root;
	public void add(String name){
		Node newnode = new Node(name);
		if(this.root==null)
			this.root=newnode;
		else
			this.root.addnode(newnode);
	}
	public void print(){
		if(this.root!=null){             //之所以在外部判断,因为printnode需要迭代
			this.root.printnode();
		}
		else
			System.out.println("链表为空,无法打印!");
	}
	public boolean search(String name){
		if(this.root.searchnode(name)==true)
			return true;
		else
			return false;
	}
	public void delete(String name){
		if(this.search(name)){	// 判断此节点是否存在
			if(this.root.name.equals(name)){
				if(this.root.next!=null){
					this.root = this.root.next ;	// 改变根节点
				}
				else{
					this.root = null ;	// 取消
				}
			}
			else{
				if(this.root.next!=null){
					this.root.next.deleteNode(root,name) ;
				}
			}
		}
		else
			System.out.println("所要删除节点不存在!");
	}
}
public class LinklistDemo {

	public static void main(String[] args) {
		Link l = new Link();
		l.add("walkthehorizon");
		l.add("已经");
		l.add("无人");
		l.add("能挡");
		l.add("了");
		l.add("么");
		System.out.println("打印链表");
		l.print();
		System.out.println("查找链表");
		System.out.println(l.search("walkthehorizon"));
		System.out.println(l.search("放逐之刃"));
		System.out.println("删除节点");
		l.delete("么");
		l.print();
	}
}

java的单链表实现核心在于多层次迭代。

时间: 2024-10-25 06:29:46

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

java单链表常用操作

总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K个节点] [查找链表中间节点] [判断链表是否有环] [从尾到头打印单链表-递归] [从尾到头打印单链表-栈] [由小到大合并有序单链表-循环] [由小到大合并有序单链表-递归] 通常在java中这样定义单链表结构 <span style="font-family:Microsoft YaHe

JAVA单链表的实现-不带头结点但带有尾指针

1,本程序实现了线性表的链式存储结构.实现的链表带有两个指针,一个始终指向链表中的第一个结点,另一个指针始终指向链表中的最后一个结点. 之所以设置尾指针,是因为,在插入元素到链表中的末尾时,可以通过尾指针直接找到链表的最后一个元素,从而不需要遍历链表就可以完成插入操作. 2,具体实现链表的类名为LList2.java,它首先实现了线性表的接口ListInterface,该接口的定义见:http://www.cnblogs.com/hapjin/p/4549492.html LList2.java

java单链表

单链表 一.单链表的概念 链表是最基本的数据结构,其存储的你原理图如下图所示 上面展示的是一个单链表的存储原理图,简单易懂,head为头节点,他不存放任何的数据,只是充当一个指向链表中真正存放数据的第一个节点的作用,而每个节点中都有一个next引用,指向下一个节点,就这样一节一节往下面记录,直到最后一个节点,其中的next指向null. 链表有很多种,比如单链表,双链表等等.我们就对单链表进行学习,其他的懂了原理其实是一样的. 二.用java实现单链表 语言只是一种工具,数据结构真正体会的是那种

JAVA单链表的实现-不带头结点且没有尾指针

本程序采用JAVA语言实现了线性表的链式实现.首先定义了线性表的接口ListInterface,然后LList类实现了ListInterface完成了链表的实现. 本实现中,链表是不带表头结点的,且有一个指针始终指向链表中的第一个元素,并没有定义尾指针.因此,每次向链表中插入新结点时需要遍历链表一次. 更详细的解释参考<数据结构与算法分析 JAVA语言描述第二版>Frank M. Carrano 著 ListInterface接口的定义如下: public interface ListInte

单链表代码

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #define ERROR 1 #define MAX 100 //定义最大初始化长度 #define DELAY 2 //定义延时单位秒 typedef int ElemType; typedef int STATUS; typedef struct Linknode{ //单链表结构体 int data; struct Linknode * next

Java 单链表的倒置

在面试,笔试的过程中经常会遇到面试官问这种问题,实现单链表的倒置方法.现在对单链表的倒置犯法做个记录,方便自己以后查看. 单链表的定义: 1 public class Node { 2 3 int v; 4 Node next; 5 public Node(){ 6 } 7 public Node(int v){ 8 this.v = v; 9 } 10 11 public int getV() { 12 return v; 13 } 14 public void setV(int v) { 1

java单链表的实现自己动手写一个单链表

单链表:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据.自己手动写一个单链表:首先,定义一个节点类: package com.wei; public class Link { public int data;// 存放数据 public Link next;// 存放下一个节点 public Link(