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)
上一篇 2022年5月18日 下午4:00
下一篇 2022年5月18日 下午4:00


相关推荐

  • 第四章:activiti RuntimeService设置获和取流程变量,及与taskService的区别,开始和完成任务时设置流程变量[通俗易懂]

    第四章:activiti RuntimeService设置获和取流程变量,及与taskService的区别,开始和完成任务时设置流程变量[通俗易懂]第四章:activiti RuntimeService设置获和取流程变量,及与taskService的区别,开始和完成任务时设置流程变量

    2022年4月23日
    150
  • 全网最详细黑苹果安装教程,小白一看就懂!

    全网最详细黑苹果安装教程,小白一看就懂!可以说:这是一套目前最全面的黑苹果安装教程,为了能让每个新手,更好的理解和掌握相关方法,教程按操作流程书写,新手请务必按顺序阅读,以便提高学习效率,高手可以随意观看,或者飘过。由于篇幅长度有限,一篇文章无法全部展现,更多具体内容请点击下方章节阅读。教程目录一、前言1,什么是黑苹果?二、硬件支持1,如何确认电脑是否支持安装黑苹果?三、准备工作1,黑苹果安装必备工具下载2,黑苹果启动U盘制作方法​3,配置EFI引导文件4,硬盘分区的设置方法​四、开始安装1,BIOS设置讲解!2,开

    2022年6月4日
    64
  • PhpStorm 2021.1激活码 有效期2021 3月破解方法

    PhpStorm 2021.1激活码 有效期2021 3月破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    43
  • 定时器循环彩灯实验c语言,定时器实验循环彩灯实验-单片机原理及应用实验报告…

    定时器循环彩灯实验c语言,定时器实验循环彩灯实验-单片机原理及应用实验报告…定时器实验循环彩灯实验-单片机原理及应用实验报告计算机与信息工程学院设计性实验报告专业:通信工程年级/班级:2011级2013—2014学年第一学期课程名称单片机原理及应用指导教师岳明本组成员学号姓名实验地点计科楼214实验时间周五3-4节项目名称定时器实验-循环彩灯实验实验类型设计性一、实验目的:1、学习8031内部计数器的使用和编程方法。2、进一步掌握中断…

    2022年7月16日
    15
  • MyEclipse+Tomcat配置详解[通俗易懂]

    MyEclipse+Tomcat配置详解[通俗易懂](尊重劳动成果,转载请注明出处:http://blog.csdn.NET/qq_25827845/article/details/53982209冷血之心的博客)关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~目录一、Tomcat1 Tomcat概述2 安装、启动、配置Tomcat2.1 Tomcat目录结构2.2 启动和关闭Tomca…

    2022年5月3日
    72
  • win10多合一原版系统_制作WIN10多合一原版系统「建议收藏」

    win10多合一原版系统_制作WIN10多合一原版系统「建议收藏」本帖最后由zhaofeng0420于2017-6-2112:27编辑开场白…已省略1000字废话先来看看效果QQ截图20170613153956.png(25.77KB,下载次数:0)2017-6-1422:10上传提前准备:WIN10原版ISO镜像cn_windows_10_multiple_editions_version_1703_updated_march_201…

    2022年6月29日
    44

发表回复

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

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