`

java-单链表

 
阅读更多

 

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中实现单链表,包括其基本操作如插入、删除、遍历等。这些操作对于理解和解决各种算法问题至关重要,尤其对于学习和准备编程考试的学员来说,是非常实用的...

    Java算法篇-单链表反转详解.pptx.pptx

    在Java中,单链表反转的代码实现可以采用迭代或递归的方式。迭代方法通常涉及三个指针,分别用于追踪当前节点、前一个节点和头节点。在遍历过程中,当前节点的next指针会指向前一个节点,然后前一个节点和当前节点...

    算法-单链表遍历及反转(java)(csdn)————程序.pdf

    单链表遍历及反转(Java) 标题解释 算法-单链表遍历及反转(Java)(csdn)————程序.pdf的标题主要讲述了单链表的遍历和反转操作,使用Java语言实现。 描述解释 单链表遍历及反转是数据结构中的一种常见...

    数据结构-单链表的操作

    在C++或Java中,这可以通过定义一个头指针并将其设置为null来实现。在Python中,可以创建一个空的列表作为链表的表示。 **2. 插入节点** 在单链表中插入节点包括定位插入位置(如果指定位置)和更新指针。插入操作...

    Java实现单链表以及单链表的操作.zip

    本教程将深入探讨如何使用Java语言来实现单链表及其相关操作。 首先,我们来理解单链表的基本概念。单链表由一系列节点组成,每个节点包含两部分:数据域(用于存储数据)和指针域(指向下一个节点)。链表的最后一...

    数据结构2表-单链表.ppt

    * 单链表可以使用 Java 语言实现,例如使用数组来存储数据元素,并使用指针来连接每个节点。 * 单链表的实现需要考虑存储空间的分配和释放,例如使用动态数组来存储数据元素。 四、单链表的操作 * 插入操作:在...

    漫话数据结构-单链表的基本操作.pptx

    单链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的引用。在单链表中,数据的访问和操作主要依赖于这些节点间的链接关系。本讲主要讨论了单链表的四个基本操作:求表的长度、...

    CH2A-单链表删除重复元素.7z

    在C++或Java等面向对象的语言中,我们可以定义一个链表节点类,包含数据成员和指向下一个节点的指针。 删除重复元素的任务涉及到遍历链表和比较相邻节点的值。一种常见的方法是使用两个指针,一个快指针(fast ...

    Java实现单链表的基本操作

    本文将深入探讨如何使用Java语言实现单链表的基本操作,包括创建链表、插入节点、删除节点以及遍历链表等关键功能。 首先,我们需要理解单链表的概念。单链表是一种线性数据结构,其中每个元素(称为节点)包含两个...

    基于JAVA的单链表简单实现

    在Java中,我们可以使用对象和引用的概念来实现单链表。 首先,我们需要创建一个表示链表节点的类Node,它通常有两个属性:data(用于存储数据)和next(用于存储指向下一个节点的引用)。例如: ```java public ...

    基于java的循环单链表

    在Java中实现循环单链表,通常会涉及以下三个主要类: 1. 接口类(LinkedListInterface):定义了链表操作的基本方法。例如,添加元素(add),删除元素(remove),查找元素(search),显示链表(display)等。...

    java实现单链表

    在这个主题中,我们将深入探讨如何使用Java来实现单链表,特别是关注如何插入元素以及如何构建链表。 单链表由一系列节点组成,每个节点包含两部分:数据元素和指向下一个节点的引用。在Java中,我们可以通过创建一...

    java单链表集合的包含运算

    单链表的插入,删除,排序!集合的并、交和差运算 编制一个能演示执行集合的并、交和差...vc mfc编的 集合运算 交并补差 包含...采用有序单链表表示集合

    链表-基于Java的单链表基本操作之链表相交.zip

    链表 链表_基于Java的单链表基本操作之链表相交

    链表-基于Java的单链表基本操作之删除操作.zip

    链表 链表_基于Java的单链表基本操作之删除操作

    链表-基于Java的单链表基本操作之逆向输出.zip

    链表 链表_基于Java的单链表基本操作之逆向输出

    链表-基于Java的单链表基本操作之链表排序.zip

    链表 链表_基于Java的单链表基本操作之链表排序

    链表-基于Java的单链表基本操作之查找操作.zip

    链表 链表_基于Java的单链表基本操作之查找操作

    链表-基于Java的单链表基本操作之链表反转.zip

    链表 链表_基于Java的单链表基本操作之链表反转

Global site tag (gtag.js) - Google Analytics