线性链表 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,售后保障稳定


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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab的插值方法[通俗易懂]

    matlab的插值方法[通俗易懂]1.Lagrange插值插值是在已知数据之间寻找估计值的过程。在信号处理和图像处理中,插值极其常用。类型很多:比如多项式插值,一、二、三维插值,样条插值等。方法介绍:对给定的n个插值点x1,x2,⋯,xnx1,x2,⋯,xn{x_1},{x_2},\cdots,{x_n}及对应的函数值y1,y2,⋯,yny1,y2,⋯,yn{y_1},{y_2},\cdots,{y_n}…

    2022年5月4日
    286
  • cmd批处理命令~%dp0与~%dpn1的解析

    cmd批处理命令~%dp0与~%dpn1的解析1、最简单的做法是在cmd命令输入:for/?,回车,就能看到详细的解析对一组文件中的每一个文件执行某个特定命令。FOR%variableIN(set)DOcommand[command-parameters]%variable指定一个单一字母可替换的参数。(set)指定一个或一组文件。可以使用通配符。command指定对每个文件执行的命令。…

    2022年9月16日
    0
  • shell if语句

    shell if语句if语句的一般结构if条件表达式then

    2022年7月27日
    1
  • 面向对象和面向过程的区别理解_c是面向对象还是面向过程

    面向对象和面向过程的区别理解_c是面向对象还是面向过程一、面向对象和面向过程面向对象面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程,数据和对数据的操作是分离的,函数本身只

    2022年8月16日
    3
  • zencart和php是什么,什么是ZenCart ZenCart有什么特点 ZenCart模板

    zencart和php是什么,什么是ZenCart ZenCart有什么特点 ZenCart模板什么是ZenCart?ZenCart有什么特点,ZenCart模板什么是ZenCart?ZenCart是免费的购物车软件-用于建立自己的网上商店,为网上销售商而设计。ZenCart是一个免费、界面友好,开放式源码的购物车软件。该软件由一些销售商、程序员、设计师和顾问们共同开发,目的就是用户能建立风格不同的电子商务系统。现有的一些解决方案过重于编程,而不是着眼于客户的需求。ZenCart把销售商…

    2022年7月27日
    1
  • 计算机编程原理_如何编程

    计算机编程原理_如何编程一、Socket简介Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。几个定义:(1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP。(2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通

    2022年10月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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