Java链表删除节点操作

Java链表删除节点操作1、创建节点类Node/***程序目的:建立一组学生成绩的单向链表程序,包含学号、姓名、和成绩3种数据。只要输入要删除学生的成绩,就可以遍历该链表,并清除学生的节点,*要结束输入时,输入“-1”,则此时会列出该链表未删除的所有学生数据。**@author86176**///构建节点类publicclassNode{ intdata; int…

大家好,又见面了,我是你们的朋友全栈君。

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144867.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java 在IDEA社区版中配置Tomcat并使用

    Java 在IDEA社区版中配置Tomcat并使用目录1.下载插件SmartTomcat2.在IDEA中配置Tomcat前言配置之前必须先配置好了Tomcat,这是在已经配置好Tomcat的前提下进行的,如果没有配置Tomcat下面有怎么配置Tomcat和Maven的链接配置Tomcat:https://blog.csdn.net/weixin_44953227/article/details/111575409配置Maven:https://blog.csdn.net/weixin_44953227/ar

    2022年9月22日
    2
  • macbook双系统文件共享_华为双系统短信共享吗

    macbook双系统文件共享_华为双系统短信共享吗MacBook安装双系统多分区共享访问解决方案1.   需求在MacBook中安装Win7,mac双系统。磁盘分区为4个(A,B,C,D),其中A(300G),B(400G)存放个人和系统无关的东西并实现两个系统都能访问A、B;C(150G)安装Win764位系统;D(150G)安装MacOS系统。双系统之间互不影响,也就是说如果Win7

    2022年10月5日
    2
  • python分苹果问题_给大家分享一个「Python算法题」分苹果

    python分苹果问题_给大家分享一个「Python算法题」分苹果今天刷到一道算法题,分享一下果园里有堆苹果,N(1<N<9)只熊来分。第一只熊把这堆苹果平均分为N份,多了一个,它把多的一个扔了,拿走了一份。第二只熊把剩下的苹果又平均分成N份,又多了一个,它同样把多的一个扔了,拿走了一份,第三、第四直到第N只熊都是这么做的,问果园里原来最少有多少个苹果?可以先尝试一下再往下看(N=5的时候,答案是3121)。先简单分析一下这道题目,假设当第k个熊取完之后还有M个…

    2022年10月10日
    3
  • codereview介绍[通俗易懂]

    codereview介绍[通俗易懂]1.定义:Codereviewissystematicexamination(oftenknownaspeerreview)ofcomputersourcecode.Itis

    2022年8月5日
    10
  • keras多层感知器识别手写数字执行预测代码_感知机模型多层神经网络

    keras多层感知器识别手写数字执行预测代码_感知机模型多层神经网络2.Keras建立多层感知器模型2.1简单介绍多层感知器模型注:以下模型及其说明来自于《TensorFlow+Keras深度学习人工智能实践应用》林大贵著以矩阵方式仿真多层感知器模型的工作方式(如下图所示)建立输入与隐藏层的公式:h1=ReLu(x*w1+b1)变量名说明输入层x仿真输入神经元接收外界传送消息,如上图所示,共有784个神经元。隐藏层h1…

    2022年10月9日
    4
  • 直接sql 添加字段赋值

    直接sql 添加字段赋值SELECTuf.fans_idasfansId,u.`nickname`asnickname,u.`head`ashead,uf.`create_time`ascreateTime,1astypeFROM`user_fans`ufLEFTJOIN`user`uONuf.fans_id=u.idWHEREuf.`u…

    2025年7月29日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号