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

java链表的增删改查,取中间值,是否成环,反转,截取

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

java链表的增删改查,取中间值,是否成环,反转,截取

单向链表:

每个节点分为value区域和next区域,value是自己的值,next区域是下一个节点的地址

链表Node类:
package node;

public class Node {
	Integer val;//定义一个节点的值
	Node next;//定义下一个节点的地址,我们这个地方需要和我们的类名相同,只有这样我们才能记录下一个节点的地址。
	public Node(Integer val) {
		this.val = val;
	}
}
链表管理类linkList,实现增删改查
package node;

public class linkList {
	//定义链表的头结点
	Node head = null;//主要目的:记录头结点的位置
	
	//尾插法:链表的尾部插入数据
	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;//indexNode上一个位置
			int position = 0;//位置
			while (indexNode!=null) {
				if (position == index) {
					node.next = indexNode;
					tempNode.next = node;
					return;
				}
				tempNode = indexNode;
				indexNode = indexNode.next;
				position++;
			}
		}
	}
	//位置删除
	public void removeNodeAtIndex(int index) {
		
		Node pronode = head;//要删除位置的前一个节点
		
		if (index<1) {//不删除节点
			return;
		}
		
		if (index==1) {//删除第一个节点
			head = head.next;
			return;
		}
		
		while (index-->2) {//使Pronode指向第index个结点前面的一个节点
			pronode = proNode.next;
		}
		proNode.next = proNode.next.next;//通过跳过结点来实现删除结点的效果
		return;
	}
}
测试类Test:
package node;

public class Test {
	public static void main(String[] args) {
		linkList linkList = new linkList();
		linkList.insert(5);
		linkList.insert(7);
		linkList.HeadInsert(4);
		linkList.HeadInsert(2);
		linkList.HeadInsert(3);
		linkList.printlink();
		System.out.println("--------------");
		System.out.println("反转:");
		linkList.fanzhuan();
		linkList.printlink();
		System.out.println("--------------");
		System.out.println("查询中间值");
		Node node = linkList.findMid();
		System.out.println(node.val);
		System.out.println("--------------");
		System.out.println("删除第二个值:");
		linkList.removeNodeAtIndex(2);
		linkList.printlink();
		System.out.println("--------------");
		linkList.NthFromEnd(2);
		linkList.printlink();
	}
}

输出结果:

 

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

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

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