线性链表 java实现「建议收藏」

线性链表 java实现「建议收藏」publicclassLinkList{ classNode{//定义Node节点 privateTdata; privateNodenext; publicNode(){} publicNode(Tdata,Nodenext){ this.data=data; this.next=next; } } privateNodehea

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

public class LinkList<T> {
	class Node{//定义Node节点
		private T data;
		private Node next;
		public Node(){}
		public Node(T data,Node next){
			this.data=data;
			this.next=next;
		}	
	}
	private Node header;//头指针
	private Node tail;//尾指针
	private int size;//线性表的长度
	public LinkList(){//构造空的线性链表
		this.header=null;
		this.tail=null;
		this.size=0;
	}
	public LinkList(T element){//构造一个节点的线性链表
		this.header=new Node(element,null);
		this.tail=this.header;
		this.size++;
	}
	public int length(){//返回线性链表的长度
		return size;
	}
	public void add(T element){//尾插法添加节点
		if(header==null){
			header=new Node(element,null);
			tail=header;
		}else{
			Node newNode=new Node(element,null);
			tail.next=newNode;
			tail=newNode;
		}
		size++;
	}
	public void addAtHeader(T element){//头插法尾链表添加新节点
		header=new Node(element,header);
		if(tail==null)
			tail=header;
		
		size++;
	}
	public Node getNodeByIndex(int index){//得到节点
		if(index<0||index>size-1){
			throw new IndexOutOfBoundsException("线性表索引越界");
		}
		Node current=header;
		for(int i=0;i<size && current!=null;current=current.next,i++){
			if(i==index)
				return current;
		}
		return null;
	}
	public int locate(T element){
		Node current=header;
		for(int i=0;i<size && current!=null;i++,current=current.next){
			if(current.data==element)
				return i;
		}		
		return -1;
	}
	public void insert(T element,int index){
		if(index<0||index>size-1){
			throw new IndexOutOfBoundsException("线性表索引越界");
		}else{
			if(index==0){
				addAtHeader(element);
			}else{
				Node prev=getNodeByIndex(index-1);
				prev.next=new Node(element,prev.next);
				size++;
			}
		}
	}
	public T delete(int index){//删除节点
		if(index<0||index>size-1){
			throw new IndexOutOfBoundsException("线性表索引越界");
		}
		Node del=null;
		if(index==0){
			del=header;
			header=header.next;
		}else{
			Node prev=getNodeByIndex(index-1);
			del=prev.next;
			prev.next=del.next;
			del.next=null;
		}
		size--;
		return del.data;	
	}
	public boolean empty(){//判断链表是否为空
		return size==0;
	}
	public void clear(){//清空链表
		header=null;
		tail=null;
		size=0;
	}
	public String toString(){
		if(empty()){
			return "[]";
		}else{
			StringBuilder sb=new StringBuilder("[");
			for(Node current=header;current!=null;current=current.next){
				sb.append(current.data.toString()+",");
			}
			int len=sb.length();
			return sb.delete(len-1,len).append("]").toString();
		}
	}
	public static void main(String []args){
		LinkList<String> list=new LinkList<String>();
		list.add("zhang san");
		list.add("li si");
		list.add("wang wu");
		list.add("zhang long");
		list.add("zhao hu");
		System.out.println("打印单链表"+list);
		System.out.println("li si"+"["+list.locate("li si")+"]");
		list.delete(4);
		System.out.println("删除元素后的单链表"+list);
	}
}

Jetbrains全家桶1年46,售后保障稳定


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234681.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Nas性能测试工具-vdbench

    Nas性能测试工具-vdbench版本:vdbench50406简介:vdbench是一个I/O工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。配置参数:大文件设置深度为2,广度为10,每个文件夹下的文件数量为400,每个文件的大小为10M,采用10个线程并发,顺序选择文件,随机读写,DirectIO的形式处理1M的数据 …

  • rapidxml解析类[通俗易懂]

    rapidxml解析类[通俗易懂]https://sourceforge.net/projects/rapidxml/files/latest/download

  • mac系统pycharm配置python环境_mac pycharm怎么设置环境

    mac系统pycharm配置python环境_mac pycharm怎么设置环境安装了pycharm,创建了测试项目,发现python的版本是2.6.9的,系统自带的版本好像是2.7的,为什么怎么样,怎么切换到2.7看了一下系统到底装了些什么版本居然有两个版本接下来设置解释器的路径Pycharm>Preferences>Build,Excution,Deployment>Console>PythonConsole设

  • 按位与、按位异或、按位取反「建议收藏」

    按位与、按位异或、按位取反「建议收藏」&按位与|按位或^按位异或1.按位与运算按位与运算符”&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。例如:9&5可写算式如下:00001001(9的二进制补码)&00000101(5的二进制补码)00000001(1的二进制补码)可见9&5=1。按位与运算通常用来对某些位

  • 最长上升子序列nlogn算法

    最长上升子序列nlogn算法最长上升子序列nlogn算法题目描述:给定一个整型数组,求这个数组的最长严格递增子序列的长度。譬如序列12243的最长严格递增子序列为1,2,4或1,2,3.他们的长度为3。输入:输入可能包含多个测试案例。对于每个测试案例,输入的第一行为一个整数n(1输入的第二行包括n个整数,代表这个数组中的数字。整数均在int范围内。

  • 折腾Cubieboard

    折腾Cubieboard1)开箱板子+塑料看

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号