用java简单的实现单链表的基本操作

 此代码仅供参考,如有疑问欢迎评论:


package com.tyxh.link;
//节点类
public class Node {
     protected Node next; //指针域
     protected int data;//数据域
    
     public Node( int data) {
           this. data = data;
     }
    
     //显示此节点
     public void display() {
          System. out.print( data + " ");
     }
}

package com.tyxh.link;
//单链表
public class LinkList {
     public Node first; // 定义一个头结点
     private int pos = 0;// 节点的位置

     public LinkList() {
           this. first = null;
     }

     // 插入一个头节点
     public void addFirstNode( int data) {
          Node node = new Node(data);
          node. next = first;
           first = node;
     }

     // 删除一个头结点,并返回头结点
     public Node deleteFirstNode() {
          Node tempNode = first;
           first = tempNode. next;
           return tempNode;
     }

     // 在任意位置插入节点 在index的后面插入
     public void add(int index, int data) {
          Node node = new Node(data);
          Node current = first;
          Node previous = first;
           while ( pos != index) {
              previous = current;
              current = current. next;
               pos++;
          }
          node. next = current;
          previous. next = node;
           pos = 0;
     }

     // 删除任意位置的节点
     public Node deleteByPos( int index) {
          Node current = first;
          Node previous = first;
           while ( pos != index) {
               pos++;
              previous = current;
              current = current. next;
          }
           if(current == first) {
               first = first. next;
          } else {
               pos = 0;
              previous. next = current. next;
          }
           return current;
     }

     // 根据节点的data删除节点(仅仅删除第一个)
     public Node deleteByData( int data) {
          Node current = first;
          Node previous = first; //记住上一个节点
           while (current. data != data) {
               if (current. next == null) {
                    return null;
              }
              previous = current;
              current = current. next;
          }
           if(current == first) {
               first = first. next;
          } else {
              previous. next = current. next;
          }
           return current;
     }

     // 显示出所有的节点信息
     public void displayAllNodes() {
          Node current = first;
           while (current != null) {
              current.display();
              current = current. next;
          }
          System. out.println();
     }

     // 根据位置查找节点信息
     public Node findByPos( int index) {
          Node current = first;
           if ( pos != index) {
              current = current. next;
               pos++;
          }
           return current;
     }

     // 根据数据查找节点信息
     public Node findByData( int data) {
          Node current = first;
           while (current. data != data) {
               if (current. next == null)
                    return null;
              current = current. next;
          }
           return current;
     }
}

package com.tyxh.link;
//测试类
public class TestLinkList {
     public static void main(String[] args) {
          LinkList linkList = new LinkList();
          linkList.addFirstNode(20);
          linkList.addFirstNode(21);
          linkList.addFirstNode(19);
           //19,21,20
          linkList.add(1, 22); //19,22,21,20
          linkList.add(2, 23); //19,22,23,21,20
          linkList.add(3, 99); //19,22,23,99,21,20
          linkList.displayAllNodes();
//        Node node = linkList.deleteFirstNode();
//        System.out.println("node : " + node.data);
//        linkList.displayAllNodes();
//        node = linkList.deleteByPos(2);
//        System.out.println("node : " + node.data);
//        linkList.displayAllNodes();
//        linkList.deleteFirstNode();
          Node node = linkList.deleteByData(19);
//        Node node = linkList.deleteByPos(0);
          System. out.println( "node : " + node. data);
          linkList.displayAllNodes();
          Node node1 = linkList.findByPos(0);
          System. out.println( "node1: " + node1. data);
          Node node2 = linkList.findByData(22);
          System. out.println( "node2: " + node2. data);
     }
}

   

最新内容请见作者的GitHub页:http://qaseven.github.io/

   

时间: 2024-09-23 05:24:52

用java简单的实现单链表的基本操作的相关文章

教你在Java中玩转单链表

学会了单链表的基本操作之后,我们就可以自定义一些非常有意思的功能了,例如对单链表中的元素进行排序,(排序规则可以由自己定),将链表翻转等等,这里主要是讲老师布置的几个问题,我觉得也非常有趣,大家也可以思考一下,由于这些方法几天前就写完了,五一假在家中也没有对之前的链表进行更多的修改了,所以还是用之前所写过的单链表结构继续添加功能吧. 在实现所有功能之前先来个前言,接下来的这两个方法对后面的每一步都是至关重要的,第一个是获取链表长度的方法: 获取链表长度的方法其实可以是打印链表方法的翻版,我最开始

C++ 单链表的基本操作(详解)_C 语言

链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表中的数据是以结点来表示的,每个结点的构成:元素 + 指针,元素就是存储数据的存储单元,指针就是连接每个结点的地址数据.如下图: 2.链表的基本操作 SingleList.cpp: #include "stdafx.h" #include "SingleList.h&

java单链表常用操作

总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K个节点] [查找链表中间节点] [判断链表是否有环] [从尾到头打印单链表-递归] [从尾到头打印单链表-栈] [由小到大合并有序单链表-循环] [由小到大合并有序单链表-递归] 通常在Java中这样定义单链表结构 [java] view plain copy <span style="fon

Java模拟单链表和双端链表数据结构的实例讲解_java

模拟单链表 线性表: 线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构. 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的. 线性表的逻辑结构简单,便于实现和操作. 在实际应用中,线性表都是以栈.队列.字符串等特殊线性表的形式来使用的. 线性结构的基本特征为: 1.集合中必存在唯一的一个"第一元素": 2.集合中必存在唯一的一个 "最后元素" : 3.除最后一个元素之外,均有 唯一的后继(后件):

Java单链表基本操作的实现_java

最近被问到链表,是一个朋友和我讨论Java的时候说的.说实话,我学习编程的近一年时间里,学到的东西还是挺少的.语言是学了Java和C#,关于Web的学了一点Html+css+javascript.因为比较偏好,学习WinForm时比较认真,数据库操作也自己有所研究.但链表这个东西我还真没有学习和研究过,加上最近自己在看WPF,而课程也到了JSP了,比较紧. 但是我还是抽了一个晚上加半天的时间看了一下单向链表.并且使用Java试着写了一个实例出来.没有接触过链表的朋友可以作为参考,希望大家多提宝贵

图解单链表逆序

逆序思想 代码 测试 本篇博客,比较简单.对单链表逆序不理解的看看就可以了. 逆序思想 现假设有一链表,有待逆序操作.我们首先想到的就是将那个指针关系逆序了就行了呗. 事实上,就是这样.博主就是以这个为目标来完成的单链表逆序操作. Node pre = null; Node post = null; while(head!=null){ post = head.next; head.next = pre; pre = head; head = post; } 这便是逆序的核心了.下面我们就来一步

C++实现单链表

之前一直没怎么在意C++中的链表,但是突然一下子让自己写,就老是出错.没办法,决定好好恶补一下该方面的知识,也为今后的数据结构大下个良好的基础,于是我总结出以下几点,有些地方可能不正确,还望大家不吝赐教,旨在共同进步. 总结: 1.链表List的基本单元是节点Node,因此想要操作方便,就必须为每一步打好基础,Node的基本结构如下: class Node{ public: int data; Node *next; Node(int da=0,Node *p=NULL){ this->data

Python单链表的简单实现方法_python

本文实例讲述了Python单链表的简单实现方法,分享给大家供大家参考.具体方法如下: 通常来说,要定义一个单链表,首先定义链表元素:Element.它包含3个字段: list:标识自己属于哪一个list datum:改元素的value next:下一个节点的位置 具体实现代码如下: class LinkedList(object): class Element(object): def __init__(self,list,datum,next): self._list = list self.

Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交

        在Java EE应用编程中Servlet是基础,JSP是建立在Servlet基础之上的,其他Web框架如Struts.WebWork和Spring MVC都是基于Servlet的.本文主要讲述MyEclipse和Tomcat配置Servlet的过程和简单实现表单提交功能.         希望对大家有所帮助,参考书籍<Java EE企业级应用开发实例教程>.         Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门 一. Servlet编程