内含单链表的头插法、尾插法、根据位置插入数据、根据位置删除数据、得到链表长度等操作。
//基于单链表的一些基础操作
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实现单链表的基本操作
本文详细介绍了如何使用Java编程实现单链表的各种基本操作,包括头插法、尾插法、按位置插入和删除元素,以及计算链表长度的方法。
765

被折叠的 条评论
为什么被折叠?



