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

这篇博客详细介绍了如何使用Java实现单链表的各种操作,包括头插法、尾插法、输出链表、获取链表长度、检查元素存在性、指定位置插入和删除节点。此外,还提供了链表中间值、环检测、翻转及截取后k个节点的功能实现。内容适合初学者理解和实践数据结构中的链表操作。
摘要由CSDN通过智能技术生成

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

后加找链表中间值判断链表是否成环找出成环位置链表翻转截取单链表后 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方法测吧。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值