Java实现单链表
前言:
StuNode类相当于C语言当中的结构体
StuNode next:相当于指向下一个元素的指针。
在Java里面没有指针的概念,只有变量的概念。
StuNode.java
/**
* @author Cody
* @date 2020/7/25 - 9:33
*/
public class StuNode {
public int id;
public String name;
public int age;
public StuNode next;
/**
* 无参构造用于创建不保存数据的头节点
* 表示单链表的头
*/
public StuNode() {
}
public StuNode(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "StuNode{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
LinkedList.java
package datastructrue.linkedlist;
/**
* @author Cody
* @date 2020/7/25 - 9:15
*/
public class LinkedList {
public StuNode head = new StuNode();
/**
* 初始化带有头节点的链表
*/
public LinkedList(StuNode head) {
this.head = head;
}
/**
* 辅助变量:保存头节点的位置。进行循环遍历
*/
public void addList(StuNode stuNode){
StuNode tmp = new StuNode();
tmp = head;
while(true){
if(tmp.next==null){
break;
}
tmp = tmp.next;
}
tmp.next = stuNode;
}
/**
* 辅助变量:保存头节点的位置。进行循环遍历
*/
public boolean delList(StuNode stuNode){
StuNode tmp = new StuNode();
tmp = head;
while (tmp.next!=null){
if(tmp.next==stuNode){
tmp.next = stuNode.next;
return true;
}
tmp = tmp.next;
}
return false;
}
public void showList(){
StuNode tmp = new StuNode();
tmp = head;
if(head.next==null){
System.out.println("当前链表信息为空");
return ;
}
while(tmp.next!=null){
tmp = tmp.next;
System.out.println(tmp);
}
}
}
Main.java
import java.util.Scanner;
/**
* @author Cody
* @date 2020/7/25 - 9:36
*/
public class Main {
/**
* Java实现单链表
*/
public static void main(String[] args) {
boolean flag = true;
int n;
/**
* 初始化单链表
*/
StuNode head = new StuNode();
LinkedList linkedList = new LinkedList(head);
while (flag){
System.out.println("************************************************");
System.out.println("******************【1】添加节点*******************");
System.out.println("******************【2】删除节点*******************");
System.out.println("******************【3】查看链表信息***************");
System.out.println("******************【4】exit***************");
System.out.println("************************************************");
System.out.println("请输入命令:");
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
switch (n){
case 1:
int id,age;
String name;
System.out.println("请输入学生ID:");
id=scanner.nextInt();
System.out.println("请输入学生姓名:");
name=scanner.next();
System.out.println("请输入学生年龄:");
age=scanner.nextInt();
linkedList.addList(new StuNode(id,name,age));
System.out.println("信息加入成功!");
break;
case 2:
int del_id,del_age;
String del_name;
System.out.println("请输入学生ID:");
del_id=scanner.nextInt();
System.out.println("请输入学生姓名:");
del_name=scanner.next();
System.out.println("请输入学生年龄:");
del_age=scanner.nextInt();
linkedList.delList(new StuNode(del_id,del_name,del_age));
System.out.println("信息删除成功!");
break;
case 3:
linkedList.showList();
break;
case 4:
flag=false;
System.out.println("退出系统成功...");
break;
}
}
}
}