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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 使用ipset来批量控制iptables

    使用ipset来批量控制iptables配置如下1、安装ipsetyuminstallipset2、使用ipset创建列表ipsetcreateserverhash:ip3、添加ipipsetaddserver192.168.1.1ipsetaddserver192.168.1.24、导出ipsetipsetsave>/etc/sysconfig/ipset5、在导出到/etc/

  • Android setDisplayOptions 具体的使用说明

    Android setDisplayOptions 具体的使用说明

  • window安装maven配置环境变量[通俗易懂]

    window安装maven配置环境变量[通俗易懂]首先去maven官网下载,点击这里去下载页面,下拉选择下图点击下载下载好之后解压出来,然后配置环境变量,在我的电脑-右键-属性-高级系统设置-环境变量然后在系统变量下点击新建变量名:M2_HOME变量值:你下载的maven解压出来的路径,我的如下,复制路径粘贴到变量值里,点击确定再找到系统变量里的:Path在变量值里加入:%M2_HOME%/bin不要…

  • pdb文件 PDB文件:每个开发人员都必须知道的 .NET PDB文件到底是什么?

    pdb文件 PDB文件:每个开发人员都必须知道的 .NET PDB文件到底是什么?pdb文件包含了编译后程序指向源代码的位置信息,用于调试的时候定位到源代码,主要是用来方便调试的。在程序发布为release模式时,建议将pdb文件删除,同时,对外发布的时候,也把pdb删除,有利于保护程序。PDB:ProgramDebugDatabase(程序调试数据库)文件  PDB(程序调试数据库)文件保持着调试和项目状态信息,从而可以对程序的调试配置进行增量…

  • KindEditor富文本编辑器 items配置项 对照表「建议收藏」

    KindEditor富文本编辑器 items配置项 对照表「建议收藏」source:’HTML代码’, undo:’后退(Ctrl+Z)’, redo:’前进(Ctrl+Y)’, cut:’剪切(Ctrl+X)’, copy:’复制(Ctrl+C)’, paste:’粘贴(Ctrl+V)’, plainpaste:’粘贴为无格式文本’, wordpaste:’从Word粘贴’, selectall:

  • linux永久关闭防火墙命令需要重新加载环境变量吗_linux常用命令关闭防火墙

    linux永久关闭防火墙命令需要重新加载环境变量吗_linux常用命令关闭防火墙第一步:systemctlstopfirewalld.service(暂时关闭防火墙服务,系统重启后防火墙还会打开)第二步:systemctldisablefirewalld.service(通过关闭防火墙服务,开机自动启动,来做到永久关闭防火墙服务)如何查看防火墙状态呢?systemctlstatusfirewalld.service如图所示,就代表关闭成功了…

发表回复

您的电子邮箱地址不会被公开。

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