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

java自写代码--单链表的基本操作

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

java自写代码--单链表的基本操作

内含单链表的头插法、尾插法、根据位置插入数据、根据位置删除数据、得到链表长度等操作。

//基于单链表的一些基础操作
import java.util.Scanner;

public class lnode {
	
	//单链表初始化
	public int data;
	public lnode next = null;
	lnode head = null;//作为头结点
	
	//无参构造函数
	public lnode() {}
	
	//带参构造函数
	public lnode(int data) {
		this.data = data;
	}
	
	//头插法插入数据
	public void addFirst(int data) {
		lnode newNode = new lnode(data);//生成一个新结点
		if(head==null) {
			head = newNode;
			return;
		}
		newNode.next = head;
		head = newNode;
	}
	
	//尾插法插入数据
	public void addEnd(int data){
		lnode newNode = new lnode(data);//生成一个新结点
		if(head==null) {
			head = newNode;
			return;
		}
		lnode temp = head;
		while(temp.next!=null) {
			temp = temp.next;
		}
		temp.next = newNode;
		
	}
	
	//头插法打印链表
	public void printfirstNode() {
		 while(head!=null){
		 	System.out.print(head.data+" ");
			head= head.next;
		 }
	}
	
	//尾插法打印链表
	public void printendNode() {
		lnode temp = head;
		while(temp!=null) {
			System.out.print(temp.data+" ");
			temp = temp.next;
		}
	}
	
	//在ndress号数据后插入数据n(尾插法)
	public void addNress(int ndress,int n) {
		if(ndress<0) {//判断插入位置是否合法
			System.out.println("不合法");
			return;
		}
		lnode newnode = new lnode(n);//生成一个新结点
		lnode temp = head;
		int number =0;
		while(temp.next!=null) {
			number++;
			if(ndress==number) {
				newnode.next = temp.next;
				temp.next = newnode;
				return;
			}
			temp = temp.next;//不断往后遍历
			}
		}
	
	//删除ndress号后一个数据(尾插法)
	public void deleteNode(int ndress) {
		if(ndress<0) {//判断删除位置是否合法
			System.out.println("不合法");
			return;
		}
		lnode temp = head;//插入一个可移动的指针
		int number1 = 0;
		while(temp.next!=null) {
			number1++;
			if(ndress==number1) {
				temp.next = temp.next.next;
				return;
			}
			temp = temp.next;//往后遍历
		}
	}
	
	//获取链表长度
	public void nodeSize() {
		lnode temp = head;//插入一个可移动的指针
		int number2 =0;//计数器
		while(temp.next!=null) {
			number2++;
			temp = temp.next;//往后遍历
		}
		System.out.println(number2+1);
	}
	
	public static void main(String[] args) {
		lnode node = new lnode();//建一个头结点
		node.addEnd(0);
		node.addEnd(1);
		node.addEnd(2);
		node.addEnd(3);
		node.addEnd(4);
		System.out.print("尾插法创建链表:");
		node.printendNode();//打印数据
		System.out.println("t");
		
		node.addNress(2, 5);//在2号数据后,也就是3号数据前插入数据5
		System.out.print("插入数据后:");
		node.printendNode();
		System.out.println("t");
		
		node.deleteNode(1);
		System.out.print("删除数据后:");
		node.printendNode();
		System.out.println("t");
		
		System.out.print("得到链表长度:");
		node.nodeSize();


		System.out.println("----------------------------");
		node.addFirst(6);
		node.addFirst(7);
		node.addFirst(8);
		node.addFirst(9);
		node.addFirst(10);
		System.out.print("头插法创建链表:");
		node.printfirstNode();//不知道为什么会先反后正打印两次,若是只有头插法就不会
		System.out.println("t");
		
	}
}

输出结果:

参考资料:java实现单链表的基本操作

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

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

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