package chain; public class Node { // 0 数据结构部分 private Node next; private int data; // 1 构造函数 public Node(int data) { this.data = data; } // 2 显示 public void display(){ System.out.println(data+ " "); } public int display1(){ return data; } /** * @return the next */ public Node getNext() { return next; } /** * @param next the next to set */ public void setNext(Node next) { this.next = next; } /** * @return the data */ public int getData() { return data; } /** * @param data the data to set */ public void setData(int data) { this.data = data; } }
package chain; /** * 单链表 * @author zm * */ public class LinkList { // 0 数据结构 private Node head; private Node tail; private int size; // 1构造函数 public LinkList(){ this.head = null; this.tail = null; this.size = 0; } public LinkList(int data){ this.head = new Node(data); this.tail = null; this.size = 1; } // 2方法 // 2.1 插入 public void add(int data){ Node node = new Node(data); if(this.head == null){ this.head = node; this.tail = node; }else{ this.tail.setNext(node); this.tail = node; } this.size ++; } // 2.2清空所有 public void clear(){ this.head = null; this.tail = null; System.gc(); } // 2.3删除最后节点 public int deleteLast(){ // 0 得到倒数第二个节点 // 1 删除最后一个节点 // 2 将倒数第二个节点作为最后一个节点 Node point = this.head; while(point.getNext() != this.tail) { point = point.getNext(); } tail = point; tail.setNext(null); size--; return 0; } // 2.4 根据角标删除元素(仅删除头、尾节点之外的元素) public boolean delete(int location){ if(location >= this.size -1 || location <= 0){ System.out.println("out of range"); return false; } boolean result = false; int count = 0; Node node = this.head; Node priveos = null; while(node.getNext() != this.tail){ // 找到要删除角标的上一个位置 if(count == location-1){ System.out.println("find the data, the previos location is " + (location-1)); System.out.println("the previos data is " + node.display1()); priveos = node; result = true; size--; break; } node = node.getNext(); count++; } if(result){ Node dealNode = priveos.getNext(); Node dealNextNode = dealNode.getNext(); priveos.setNext(dealNextNode); dealNode.setNext(null); } return result; } // 2.5 判定是否包含元素 public boolean exists(int data){ boolean flag = false; Node point = head; while(point.getNext() != null) {// 先判断非尾元素节点 if(point.getData() == data){ flag = true; break; } point = point.getNext(); } if(!flag){ // 最后判断尾巴节点 if(tail.getData() == data) { flag = true; } } return flag; } // 2.6 显示所有元素 public void display(){ Node node = head; while(node.getNext() != null){// 先显示非尾元素节点 System.out.println(node.getData()); node = node.getNext(); } System.out.println(tail.getData());// 最后显示尾元素节点 } // 2.7 显示头结点 public void deleteHead(){ if(this.size ==1){ head = null; tail = null; size = 0; }else{ Node node = head.getNext(); head.setNext(null); head = node; } } public int size() { return this.size; } public static void main(String[] args) { LinkList list = new LinkList(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); //System.out.println(list.size()); //list.display(); //list.deleteLast(); //list.display(); //list.delete(3); // list.deleteHead(); list.display(); System.out.println(list.exists(4)); } }
相关推荐
在这个"Java算法实例-单链表操作"中,我们将探讨如何在Java中实现单链表,包括其基本操作如插入、删除、遍历等。这些操作对于理解和解决各种算法问题至关重要,尤其对于学习和准备编程考试的学员来说,是非常实用的...
在Java中,单链表反转的代码实现可以采用迭代或递归的方式。迭代方法通常涉及三个指针,分别用于追踪当前节点、前一个节点和头节点。在遍历过程中,当前节点的next指针会指向前一个节点,然后前一个节点和当前节点...
单链表遍历及反转(Java) 标题解释 算法-单链表遍历及反转(Java)(csdn)————程序.pdf的标题主要讲述了单链表的遍历和反转操作,使用Java语言实现。 描述解释 单链表遍历及反转是数据结构中的一种常见...
在C++或Java中,这可以通过定义一个头指针并将其设置为null来实现。在Python中,可以创建一个空的列表作为链表的表示。 **2. 插入节点** 在单链表中插入节点包括定位插入位置(如果指定位置)和更新指针。插入操作...
本教程将深入探讨如何使用Java语言来实现单链表及其相关操作。 首先,我们来理解单链表的基本概念。单链表由一系列节点组成,每个节点包含两部分:数据域(用于存储数据)和指针域(指向下一个节点)。链表的最后一...
* 单链表可以使用 Java 语言实现,例如使用数组来存储数据元素,并使用指针来连接每个节点。 * 单链表的实现需要考虑存储空间的分配和释放,例如使用动态数组来存储数据元素。 四、单链表的操作 * 插入操作:在...
单链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的引用。在单链表中,数据的访问和操作主要依赖于这些节点间的链接关系。本讲主要讨论了单链表的四个基本操作:求表的长度、...
在C++或Java等面向对象的语言中,我们可以定义一个链表节点类,包含数据成员和指向下一个节点的指针。 删除重复元素的任务涉及到遍历链表和比较相邻节点的值。一种常见的方法是使用两个指针,一个快指针(fast ...
本文将深入探讨如何使用Java语言实现单链表的基本操作,包括创建链表、插入节点、删除节点以及遍历链表等关键功能。 首先,我们需要理解单链表的概念。单链表是一种线性数据结构,其中每个元素(称为节点)包含两个...
在Java中,我们可以使用对象和引用的概念来实现单链表。 首先,我们需要创建一个表示链表节点的类Node,它通常有两个属性:data(用于存储数据)和next(用于存储指向下一个节点的引用)。例如: ```java public ...
在Java中实现循环单链表,通常会涉及以下三个主要类: 1. 接口类(LinkedListInterface):定义了链表操作的基本方法。例如,添加元素(add),删除元素(remove),查找元素(search),显示链表(display)等。...
在这个主题中,我们将深入探讨如何使用Java来实现单链表,特别是关注如何插入元素以及如何构建链表。 单链表由一系列节点组成,每个节点包含两部分:数据元素和指向下一个节点的引用。在Java中,我们可以通过创建一...
单链表的插入,删除,排序!集合的并、交和差运算 编制一个能演示执行集合的并、交和差...vc mfc编的 集合运算 交并补差 包含...采用有序单链表表示集合
链表 链表_基于Java的单链表基本操作之链表相交
链表 链表_基于Java的单链表基本操作之删除操作
链表 链表_基于Java的单链表基本操作之逆向输出
链表 链表_基于Java的单链表基本操作之链表排序
链表 链表_基于Java的单链表基本操作之查找操作
链表 链表_基于Java的单链表基本操作之链表反转