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

本文详细介绍了如何使用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实现单链表的基本操作

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值