首先写完了update和delete函数,在之前的铺垫下。倒是不难,结构和之前的都相同,遍历找到节点后处理该节点。代码如下

public void update(teamNode node){
teamNode temp=head;
boolean flag=false;
while(true){ if (temp.no== node.no){
flag=true;
break;
}
if(temp.next==null) break;
temp=temp.next;
}
if(!flag){
System.out.println("无该名次队伍");
}else {
temp.name= node.name;
temp.point=node.point;
}
}
public void delete(int n){
teamNode temp=head;
boolean flag=false;
while(true){
if(temp.next==null) break;
if (temp.next.no== n){
flag=true;
break;
} temp=temp.next;
}
if(!flag){
System.out.println("无该名次队伍");
}else {
temp.next=temp.next.next;
}
}

此外,还有一些关于单链表的题:

1、单链表中的有效节点数

思路为遍历获取节点个数,带头节点的话需要不计入。步骤为:传入头节点,判断是否为空链表,不为则创建辅助节点,遍历整个链表。

public static int getlength(teamNode node){
if(node.next==null){
return 0;
}
int len=0;
teamNode temp=node;
while (temp!=null){
len++;
temp=temp.next;
}
return len;
}

2、查找单链表中的倒数第k个节点。

方法参数为头节点和一个int代表倒数第几个节点。得到链表长度后,判断此节点是否存在。若存在则遍历链表到(len-k)个即可得到该节点。未找到的话返回null

public static teamNode findnode(teamNode head,int k){
if(head.next==null){
return null;
}
int len=getlength(head);
if(k<=0||k>len) return null;
teamNode temp=head.next;
for (int i=0;i<len-k;i++){
temp=temp.next;
}
return temp;
}

除了此思路还有一种是用双指针,让两个指针相隔k个位置,当后方的指针指到空时,前指针则指向倒数第k个节点。

3、单链表的反转

思路简单来说就是新建一个头节点,将原链表的节点一个个取出,用头插法插入新链表,最后将原头节点与链表相连接。

仔细说分为一下几步,先创建一个新的头节点,然后开始遍历原链表,拿出节点后永远放在新链表的头节点之后,即新链表有效数据的第一个,最后将原链表的头节点的next连到新链表的第一个节点上即可。

此函数最开始不仅要判断原链表是否为空,若原链表只有一个节点,其也不用反转,直接返回原链表即可。

在遍历时,因为被遍历到的节点需要“拿出来”去改变其next,所以需要一个node来临时保存其next,让我们能获得下一个节点。因为被遍历到的节点的next要去连接新链表的值,若不保存,原来指向的那个节点还未被遍历到,覆盖后就无法得到那个节点了。

所以在此处要创建三个节点,一为辅助节点temp,一为临时保存的next节点,一为新链表的头节点。

public static void reverse(teamNode head){
if(head.next==null||head.next.next==null){
return;
}
teamNode temp=head.next;
teamNode next=null;
teamNode rehead=new teamNode(0,"","");
while (temp!=null){
next=temp.next;
temp.next=rehead.next;
rehead.next=temp;
temp=next;
}
head.next=rehead.next;
}

4、从尾到头打印单链表

可以先利用上面的函数反转了再打印,但会导致原链表彻底变化(当然打印完再转一遍也不是不行。。)但此处选择用栈 stack来解决。利用其先进后出的原理来解决该题。其中,利用Stack<teamNode> stack=new Stack<teamNode>();可创建栈,栈中的数据形式可自定义,此处为node。

其中,stack.add()stack.push()为入栈,

stack.pop()为取出并返回栈顶的第一个数据。

因为题目要求为打印,因此不用形成链表,有输出即可。

public  static void reprint(teamNode head){
if (head!=null){
return;
}
Stack<teamNode> stack=new Stack<teamNode>();
teamNode temp=head.next;
while (temp!=null){
stack.push(temp);
temp=temp.next;
}
while (stack.size()>0){
System.out.println(stack.pop());
}
}

写完这些我可以说是对单链表确实的有了更深的理解,在之前就有所了解数据结构的基础上,可以说是对java中的链表有了进一步的了解。但当看到最后一题用的栈时,我在想java中是不是也有这样已经给我们写好的基本链表定义和一些函数呢,不然难道每次需要用到链表的时候都需要重新这样从头开始定义一遍嘛。很显然,我的懒鬼想法是大多数人的想法,java当然有直接的定义和预先写好的函数。但对于此些API和定义我还尚且不太清楚。

9.java单链表初学代码复现及一些不值一提的小问题(2)的更多相关文章

  1. Java单链表反转 详细过程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实 ...

  2. Java单链表反转图文详解

    Java单链表反转图文详解 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享 背景回顾 单链表的存储结构如图: 数据域存放数据元素,指针域存放后继结点地址 我们以一条 N1 ...

  3. java 单链表 练习

    练习一下java单链表的简单习题 package com.test1; import java.util.Stack; public class SingleListDemo { /** * 返回单链 ...

  4. java单链表代码实现

    用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...

  5. java单链表常用操作

    总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...

  6. JAVA单链表的实现-不带头结点但带有尾指针

    1,本程序实现了线性表的链式存储结构.实现的链表带有两个指针,一个始终指向链表中的第一个结点,另一个指针始终指向链表中的最后一个结点. 之所以设置尾指针,是因为,在插入元素到链表中的末尾时,可以通过尾 ...

  7. java 单链表反转

    最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转.闲来无事,决定就这个问题进行一番尝试. 1.准备链表 准备一个由DataNode组成的单向链表,DataNode如下: pub ...

  8. 用c#实现单链表(程序代码已经验证,完全正确)

    1.程序的大致结构如下图: 2.下面依次列出各个类的代码 ①ILISTDs.cs  这是一个接口类,列出单链表的方法 using System; using System.Collections.Ge ...

  9. JAVA单链表的实现-不带头结点且没有尾指针

    本程序采用JAVA语言实现了线性表的链式实现.首先定义了线性表的接口ListInterface,然后LList类实现了ListInterface完成了链表的实现. 本实现中,链表是不带表头结点的,且有 ...

  10. Java单链表简单实现* @version 1.0

    package com.list; /** * 数据结构与算法Java表示 * @version 1.0 * @author 小明 * */ public class MyLinkedList { p ...

随机推荐

  1. HEU_KMS_Activator_v27.0.2全能系统数字许可激活工具

    HEU_KMS_Activator_v27.0.2全能系统数字许可激活工具 HEU KMS Activator是KMS激活工具,支持激活 Windows XP.Windows 7.Windows 8. ...

  2. WinRAR的 安装与下载

    一.简介 WinRAR 是一个强大的压缩文件管理工具.它能备份你的数据,减少你的 E-mail 附件的大小,解压缩从 Internet 上下载的 RAR.ZIP 和其他格式的压缩文件,并能创建 RAR ...

  3. ‘mongo‘不是内部或外部命令,也不是可运行的程序或批处理文件

    出现问题原因: MongoDB环境变量未配置 解决办法: 1)右击我的电脑-->属性,进入系统属性界面,点击如下图所示位置的[高级系统设置],在弹窗的[系统属性]的[高级]选项卡右下角点击[环境 ...

  4. vue+element 返回数组或json数据自定义某列显示的处理--两种方法

    本文是作者开发一个业务需求时,将返回数据列表的其中一个数据长度很长的字段处理成数组,并将其作为子表显示的过程,具体样式如下(数据做了马赛克处理) 返回的过长字段数据处理(用分号分隔的一个长字段): t ...

  5. Fiegn 声明式接口调用

    五:Fiegn 声明式接口调用 什么是Fiegn Netfix,Fiegn 是一个提供模板式的Web Service客户端,使用Fiegn 可以简化Web Service 客户端的编写,开发者可以通过 ...

  6. Cobalt Strike 之: Aggressor Script

    郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. Co ...

  7. 100、 FilenameUtils

    FilenameUtils import org.apache.commons.io.FilenameUtils; 测试数据 String fileDirectory = "/D:/aa/b ...

  8. 四种语言刷算法之删除链表的倒数第 N 个结点

    力扣19. 删除链表的倒数第 N 个结点 1.C /**  * Definition for singly-linked list.  * struct ListNode {  *     int v ...

  9. javaSE学习四

    Super /*super注意点: 1. super调用父类的构造方法,必须在构造方法的第一一个 2. super必须只能出现在子类的方法或者构造方法中! 3. super和this 不能同时调用构造 ...

  10. virtualbox装配fedora时,安装增强功能包时会报错解决

    virtualbox安装fedora时,安装增强功能包时会报错解决 Building the main GuestAdditions module [失败]安装前需要先安装下面几个包才可以避免这个问题 ...