链表(java)

本文深入讲解了链表这一数据结构的实现与应用,包括节点定义、链表创建、数据插入与删除、查找等功能的实现过程。通过具体代码示例,展示了如何在Java中构建和操作链表。

1、节点
2、链表
3、测试类

1、节点

package com.cwq.ch04;

/** 
 * 节点,先定义每个数据的格式
 * @author Carpoor  
 * @date 2019年1月29日 
 */
public class Node {

	public long data;
	public Node next;
	
	public Node(long data) {
		this.data = data;
	}
	
	public void display() {
		System.out.print(data + " ");
	}
}

2、链表

package com.cwq.ch04;

/** 
 * 链表,将数据串起来
 * @author Carpoor  
 * @date 2019年1月29日 
 */
public class MyLinkedList {

	private Node first;
	
	public MyLinkedList() {
		first = null;
	}
	
	/**
	 * 插入数据
	 */
	public void insertFirst(long value) {
		Node node = new Node(value);
		node.next = first;
		first = node;
	}
	
	/**
	 * 删除数据
	 */
	public Node deleteFirst() {
		Node tmp = first;
		first = first.next;
		return tmp;
	}
	
	/**
	 * 展示数据
	 */
	public void display() {
		Node current = first;
		while (current != null) {
			current.display();
			current = current.next;
		}
		System.out.println();
	}
	
	/**
	 * 查找数据
	 */
	public Node find(long value) {
		Node current = first;
		while (current.data != value) {
			if (current.next == null) {
				return null;
			}
			current = current.next;
		}
		return current;
	}
	
	/**
	 * 删除数据
	 */
	public Node delete(long value) {
		Node current = first;
		Node prev = first;
		while (current.data != value) {
			if (current.next == null) {
				return null;
			}
			prev = current;
			current = current.next;
		}
		if (current == first) {
			first = first.next;
		} else {
			prev.next = current.next;
		}
		
		return current;
	}
	
}

3、测试类

package com.cwq.ch04;

/** 
 * @author Carpoor  
 * @date 2019年1月29日 
 */
public class TestMyLinkedList {

	public static void main(String[] args) {
		MyLinkedList list = new MyLinkedList();
		list.insertFirst(20);
		list.insertFirst(50);
		list.insertFirst(30);
		list.insertFirst(40);
		list.insertFirst(10);
		
		list.display();
		Node deleteFirst = list.deleteFirst();
		deleteFirst.display();
		System.out.println();
		list.display();
		
		Node find = list.find(30);
		find.display();
		System.out.println();
		list.delete(30);
		list.display();
	}
	
}

### Java链表的实现与用法 #### 链表概述 链表是一种线性的数据结构,在内存中的存储位置可以不连续,这与数组不同。在Java中,`LinkedList` 是基于链表的数据结构之一,它提供了高效的插入和删除操作[^1]。 #### `LinkedList` 的基本特性 `LinkedList` 类实现了`List` 接口以及 `Deque` (双端队列)接口,这意味着它可以作为列表或者栈、队列来使用。相比于 `ArrayList` ,当涉及到频繁的元素增删时,`LinkedList` 更具效率因为不需要移动其他元素的位置。 #### 创建并初始化 `LinkedList` 创建一个空的 `LinkedList` 对象非常简单: ```java import java.util.LinkedList; public class Example { public static void main(String[] args){ // 构建一个空的 LinkedList LinkedList<Integer> list = new LinkedList<>(); // 向其中添加一些整数类型的元素 list.add(1); list.add(2); list.add(3); System.out.println(list); // 输出: [1, 2, 3] } } ``` 也可以通过已有的集合对象构建一个新的 `LinkedList`: ```java // 使用 ArrayList 初始化 LinkedList List<String> arrayList = Arrays.asList("JavaSE", "JavaWeb", "JavaEE"); List<String> linkedList = new LinkedList<>(arrayList); System.out.println(linkedList); // 输出: [JavaSE, JavaWeb, JavaEE] ``` 上述代码展示了如何利用现有的 `ArrayList` 来快速填充新的 `LinkedList` 实例[^2]。 #### 插入、查询及移除节点的操作 对于自定义的链表类来说,通常会提供一系列的方法来进行这些基础操作。下面是一个简单的例子展示了一个名为 `LinkList` 自定义链表类的部分功能[^3]: ```java class LinkList{ private Node head; // ...省略部分成员变量... /** 添加新结点 */ public boolean InsertValue(int index,int value){ //...具体逻辑... } /** 删除指定索引处的结点 */ public Object removeValue(int index){ //...具体逻辑... } /** 打印当前链表的内容 */ public void PrintList(){ //...打印逻辑... } } public class Test1 { public static void main(String[] args) { LinkList list = new LinkList(); System.out.println("初始链表数据"); list.InitList(8); list.PrintList(); System.out.println("插入后的链表数据"); list.InsertValue(3,66); list.PrintList(); System.out.println("删除数据后的链表"); list.removeValue(6); list.PrintList(); } } ``` 这段代码片段演示了怎样在一个用户定义的链表上执行插入、显示和删除等常见操作。 #### 迭代访问链表元素 为了方便开发者能够更加灵活地遍历整个链表,`LinkedList` 支持迭代器模式,并且实现了 `Iterable<T>` 接口,允许使用增强型for循环轻松遍历其内部项[^4]。 ```java LinkedList<String> languages = new LinkedList<>(); languages.addAll(Arrays.asList("Python","JavaScript")); // 使用 Iterator 或者 foreach 循环都可以很好地工作 Iterator<String> it = languages.iterator(); while(it.hasNext()){ String lang = it.next(); System.out.print(lang+" "); } // 或者更简洁的方式 for(String s : languages){ System.out.print(s+","); } ``` 以上就是关于 Java链表的一些基础知识及其典型应用场景介绍。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值