栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 学习 ~单链表的几个功能方法 -1-

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 学习 ~单链表的几个功能方法 -1-

本篇有单链表的:头插法,尾插法,输出,链表长度的输出,查看链表中是否存在某个值,指定位置插入(值,位置),指定位置删除。 (看注释)

后加,找链表中间值,判断链表是否成环,找出成环位置,链表翻转,截取单链表后 k 个节点。请走链接:

Java 单链表的几个功能实现 -2-篇_阿A轲的博客-CSDN博客

链表:地址不连续存储 (磁盘)

单链表:

 定义链表:

(看注释)

public class Node {
Integer val;//定义节点

Node next;//保存下一个节点地址,需要类型与类名保持一致,才能记录下一个节点地址。
public Node(Integer val) {
	this.val=val;
}
}
//创建链表管理类  方便实现链表增删改查 等操作
public class linkList {
	//定义链表 头节点
	 Node head =null; //Node 类型  能定义头节点位置
	 
//尾插法 链表尾部插入数据
	 public void insert(int val) {
		 //创建节点
		 Node node=new Node(val);
		// 判断头记录是否为空
		 if(head==null) {
			 head=node;
			 return;
		 }
		 //定义指针
		 Node indexNode =head;
		 //从头进行遍历
		 while(indexNode.next!=null) {
			 indexNode =indexNode.next;
		 }
		 indexNode.next=node;
	 }
	 	
//头插法
	 public void HeadInsert(int val) {
		 Node node=new Node(val);
		 if(head==null) {
			 head=node;
			 return;
		 }
		 node.next=head;
		 head=node;
	 }
	 
 //输出一下
	 public void Printlink() {
		 Node indexNode=head;
		 while(indexNode!=null) {
			 System.out.println(indexNode.val);
			 indexNode=indexNode.next;
		 }
	 }

 //输出链表长度
	 public int GetLength() {
		 int length=0;
		 Node indexNode=head;
		 while(indexNode!=null) {
			 length++;
			 indexNode=indexNode.next;
		 }
		 return length;
	 }
	 
//查询某个值是否在链表中
	 public boolean contains(int val) {
		 Node indexNode=head;
		 while(indexNode!=null) {
			 if(indexNode.val==val) {
				 return true;
			 }
			 indexNode=indexNode.next;
		 }
		 return false;
	 }
	 
//指定地方插入,(值,位置)
	 public void addNodeAtIndex(int val,int index) {
		 if(index==0) {
			 HeadInsert(val);
		 }else if(index==GetLength()) {
			 insert(val);
		 }else {
			 //中间某位置插入
			 //1新建插入节点
			 Node node=new Node(val);
			 //2 定义游标遍历链表
			 Node indexNode=head;
			 Node tempNode=null;
			 int position=0;
			 while(indexNode!=null) {
				 if(position==index) {
					 node.next=indexNode;
					 tempNode.next=node;
					 return;
				 }
				 tempNode=indexNode;
				 indexNode=indexNode.next;
				 position++;
			 }
		 }
	 }

//指定位置删除
	 public void  delete(int index) {
			//首先判断index的合法性
			if (index<0 || index > GetLength()) {
				throw new IndexOutOfBoundsException("index 不合法");
			}
			//如何删除的是头部,那么栈内存直接指向一下个就好了
			if(index == 0) {
				head = head.next;
				return;
			}
			//定义一个节点指向该链表、
			Node tempListNode = head;
			Node pre = null;  //记录前置结点
			//找到相关的位置
			int position =0;
			while(tempListNode != null) {
				//如果位置正确那么就定下来.进行交换
				if (position == index) {
					pre.next = tempListNode.next;
					tempListNode.next = null;
					return;
				}
				pre = tempListNode;
				tempListNode = tempListNode.next;
				position ++ ;
			}
			}

}

自己写main方法测吧。。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号