大家好,又见面了,我是你们的朋友全栈君。
1、创建节点类Node
/**
* 程序目的:建立一组学生成绩的单向链表程序,包含学号、姓名、和成绩3种数据。 只要输入要删除学生的成绩,就可以遍历该链表,并清除学生的节点,
* 要结束输入时,输入“-1”,则此时会列出该链表未删除的所有学生数据。
*
* @author 86176
*
*/
//构建节点类
public class Node {
int data;
int np;
String names;
Node next;
// 节点声明的构造函数
public Node(int data, int np, String names) {
this.data = data;
this.np = np;
this.names = names;
this.next = null;
}
}
2、定义指针类以及构建链表,删除节点方法
/**
* 程序目的:定义头结点和尾结点的节点指针,以及建链表方法和删除节点方法
* @author 86176
*
*/
public class StuLinkedList {
public Node first;
public Node last;
public boolean isEmpty() {
return first == null;
}
// 创建输入方法
public void print() {
Node current = first;
while (current != null) {
System.out.println("[" + current.data + "" + current.names + "" + current.np + "]");
current = current.next;
}
System.out.println();
}
// 创建插入方法
public void insert(int data, String names, int np) {
Node newNode = new Node(data, np, names);
if (this.isEmpty()) {
first = newNode;
last = newNode;
} else {
last.next = newNode;
last = newNode;
}
}
// 创建删除节点的方法
public void delete(Node delNode) {
Node newNode;
Node tmp;
// 删除链表的第一个节点,只需要把链表首指针指向第二个节点即可
if (first.data == delNode.data) {
first = first.next;
}
// 删除链表后的最后一个节点,只要将指向最后一个节点的指针直接指向null即可
else if (last.data == delNode.data) {
System.out.println("I am here\n");
newNode = first;
while (newNode.next != last) {
newNode = newNode.next;
newNode.next = last.next;
last = newNode;
}
}
//删除链表内的中间节点:只要将删除节点的前一个节点指针指向要删除节点的下一个节点即可
else {
newNode = first;
tmp = first;
while (newNode.data != delNode.data) {
tmp = newNode;
newNode = newNode.next;
}
tmp.next = delNode.next;
}
}
}
3、实例:输入要删除学生的成绩,清除节点,结束输入时输入-1
import java.io.*;
import java.util.*;
/**
* 程序目的:利用链表建立、删除和打印学生成绩
*
* @author 86176
*
*/
public class CH03_02 {
public static void main(String[] args) throws IOException {
BufferedReader buf;
Random rand = new Random();
buf = new BufferedReader(new InputStreamReader(System.in));
StuLinkedList List = new StuLinkedList();
int i, j, findword = 0, data[][] = new int[12][10];
String name[] = new String[] { "Allen", "Scott", "Bell", "Kobe", "Jamse", "Jack", "Gorge", "Yao", "Bob", "Lisa",
"Hanson", "Amy" };
System.out.println("学号 成绩 学号 成绩 学号 成绩 学号 成绩\n");
for (i = 0; i < 12; i++) {
data[i][0] = i + 1;
data[i][1] = (Math.abs(rand.nextInt(50))) + 50;
List.insert(data[i][0], name[i], data[i][1]);
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
System.out.println("["+data[j*3+i][0]+"]["+data[j*3+i][1]+"]");
System.out.println();
}
while(true)
{
System.out.println("输入要删除成绩的学号,结束输入-1");
findword=Integer.parseInt(buf.readLine());
if (findword==-1) {
break;
}else {
Node current=new Node(List.first.data,List.first.np,List.first.names);
current.next=List.first.next;
while(current.data!=findword) {
current=current.next;
List.delete(current);
}
System.out.println("删除后成绩链表,请注意!要删除的成绩其学号必须在此链表中\n");
List.print();
}
}
}
}
}
输出:
学号 成绩 学号 成绩 学号 成绩 学号 成绩
[1][78]
[4][77]
[7][67]
[10][75]
输入要删除成绩的学号,结束输入-1
1
删除后成绩链表,请注意!要删除的成绩其学号必须在此链表中
[1Allen78]
[2Scott82]
[3Bell78]
[4Kobe77]
[5Jamse59]
[6Jack52]
[7Gorge67]
[8Yao99]
[9Bob91]
[10Lisa75]
[11Hanson57]
[12Amy61]
输入要删除成绩的学号,结束输入-1
-1
[2][82]
[5][59]
[8][99]
[11][57]
输入要删除成绩的学号,结束输入-1
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144867.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...