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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm导出html_python怎么保存代码

    pycharm导出html_python怎么保存代码pycharm一般安装完毕,就是默认是自动保存的,但是……但是….既然是程序,既然是软件,就难免出现bug。也许会有码友出现头天晚上写好的代码,打开一看,第二天白花花一片!!!最简单的,就是每次编写完毕,习惯按ctrl+s手动保存。但是,提醒你务必检查一下你的设置里面,是不是码友弄好自动保存!步骤如下:菜单File->Settings…->Appeara…

    2022年8月28日
    1
  • 联合索引(多列索引)[通俗易懂]

    联合索引(多列索引)[通俗易懂]联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.最左匹配原则假定上图联合索引的为(a,b)。联合索引也是一棵B+树,不同的是B+树在对索引a排序的基础上,对索引b排序。所以数据按照(1,1),(1,2)……顺序排放。对于selete*fromtablewherea=XXandb=XX,显然是可以使用…

    2022年6月3日
    72
  • java 取余 小数_Java小数取余问题求助「建议收藏」

    java 取余 小数_Java小数取余问题求助「建议收藏」2016-09-0101:19最佳答案楼上的全不明白楼主的意思,楼主要的是算法,不是程序你们懂吗!!!我只能说你们不懂什么叫真正的算法,你们只是计算机的傀儡,我看了你们回答非常生气,高校教出来的就是这种“人才”,连算法都不懂。还不如我一高中生。严重BS楼上的,尤其是说java语言的那位。我来告诉你这个问题用递推解决首先要你承认一个公式,我是习惯pascal语言的,c++怕写错,反正只是算法,你忍…

    2022年6月6日
    41
  • 红外测距模块 51单片机_智能激光测距「建议收藏」

    红外测距模块 51单片机_智能激光测距「建议收藏」编者按:本文转载于酷耍(http:/kooshua.com)一、设计目的超声波测距和激光测距是现在比较常见的两种测距方式。两种方式相对比而言,激光测距的优点是以极小的一束激光发射出去再返回,精度为毫米级,几乎不受干扰,弥补了超声波测距易受环境干扰、误差大的缺陷。因此,采用激光测距便更能完美的实现想要的结果。本设计不仅能对距离完成精确快速的测量,还可以对测量数据进行语音播报、编号存储,使数据记录更加…

    2022年6月1日
    42
  • 2022年计算机考研过线就能上的学校[通俗易懂]

    2022年计算机考研过线就能上的学校[通俗易懂]部分考研同学本科是双非计算机类专业,基础能力一般,编程能力较弱,那么对于这类考生,主要还是以求稳为主,选择一个分数略低,复试较简单的学校,上岸几率就会加大。那么2022年计算机考研过线上岸率高的院校有哪些呢?

    2022年6月6日
    335
  • idea 激活码2021 3月最新注册码

    idea 激活码2021 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    49

发表回复

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

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