Java实现单链表及相关操作

Java实现单链表及相关操作

单链表

概述

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的。

每个结点的构成:

  • 元素(数据元素的映象)
  • 指针(指示后继元素存储位置)

元素就是存储数据的存储单元, 指针就是连接每个结点的地址数据。

单链表结构图

www.zeeklog.com  - Java实现单链表及相关操作

结点类

/** * @auther: lawt * @date: 2018/11/4 08 * @Description: 结点信息 */ public class Node { /** * 为了方便,这两个变量都使用public,而不用private就不需要编写get、set方法了。 * 存放数据的变量,简单点,直接为int型 */ public int data; /** * 存放结点的变量,默认为null */ public Node next; /** * 构造方法,在构造时就能够给data赋值 */ public Node(int data) { this.data = data; } }

相关操作

插入头结点

public static void insertHead(Node head, Node newHead) { Node old = head; head = newHead; head.next = old; }

插入尾节点

public static void insertTail(Node tail, Node newTail) { Node old = tail; tail = newTail; tail.next = null; old.next = tail; }

遍历

public static void query(Node head) { while (head != null) { System.out.print(head.data + " "); head = head.next; } System.out.println(); }

查找某个结点

public static int find(Node head, int data) { int index = -1;//初始值为-1 int count = 0;//可以知道循环次数 while (head != null) {//当头结点部位null if (head.data == data) {//如果该节点的值==找的 index = count; } count++;//没有找到,循环次数+1 head = head.next;//没有找到继续遍历 } return index;//返回链表下标

插入

public static void insert(Node pre, Node node) { node.next = pre.next; pre.next = node; }

删除

public static void delete(Node pre) { pre.next = pre.next.next; }

获取中间节点

public static Node getMid(Node head) { if (head == null) { return head; } Node fast = head; Node slow = head; while (fast.next != null && fast.next.next != null) { slow = slow.next; fast = fast.next.next; } return slow;

反转链表

public static Node reversal(Node head) { Node pre = null; Node next = null; while (head != null) { next = head.next; head.next = pre; pre = head; head = next; } return pre; }

测试代码

public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node node4 = new Node(4); node1.next = node2; node2.next = node3; node3.next = node4; node4.next = null; query(node1); Node newHead = new Node(6); insertHead(node1, newHead); Node node7 = new Node(7); insertTail(node4, node7); query(newHead); System.out.println(find(newHead, 3)); Node node8 = new Node(8); insert(node3, node8); query(newHead); delete(newHead, node3); query(newHead); Node head= new Node(1); Node n2 = new Node(2); Node n3 = new Node(3); head.next = n2; n2.next = n3; n3.next = null; System.out.println(getMid(head).data); System.out.println(); Node node = reversal(head); while (node != null) { System.out.print(node.data + " "); node = node.next; } }

结果

www.zeeklog.com  - Java实现单链表及相关操作

Read more

超快速,使用ChatGPT编写回归和分类算法

超快速,使用ChatGPT编写回归和分类算法

本文将使用一些 ChatGPT 提示,这些提示对于数据科学家在工作时非常重要。 微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩 以下是一些示例ChatGPT 提示的列表以及数据科学家的响应。 ChatGPT 提示 为决策树回归算法生成 python 代码。 下面是使用scikit-learn在 Python 中进行决策树回归的示例代码: import numpy as np import matplotlib.pyplot as plt from sklearn.tree import DecisionTreeRegressor # Generate random data rng = np.random.default_rng() x = 5 * rng.random(100) y = np.sin(x) + 0.

By Ne0inhk
力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法

力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法

993.二叉树的堂兄弟节点 难度:简单 题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。 我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。 只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。 示例: 示例 1: 输入:root = [1,2,3,4], x = 4, y = 3 输出:false

By Ne0inhk
1239.串联字符串的最大长度 关于字符串的回溯算法!

1239.串联字符串的最大长度 关于字符串的回溯算法!

题目: 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串, 如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。 请返回所有可行解 s 中最长长度。 提示: 1 <= arr.length <= 16 1 <= arr[i].length <= 26 arr[i] 中只含有小写英文字母 示例: 示例 1: 输入:arr = ["un","iq","ue"] 输出:4 解释:所有可能的串联组合是

By Ne0inhk