Java 有序单链表与二分查找

在计算机科学中,数据结构是组织、管理和存储数据的方式,以便可以高效地访问和修改数据。有序单链表是一种常见的数据结构,它允许我们以线性方式存储有序的数据项。而二分查找是一种高效的搜索算法,可以在有序数据集中快速定位元素。本文将介绍如何在Java中实现有序单链表,并使用二分查找算法进行数据检索。

有序单链表

有序单链表由一系列节点组成,每个节点包含数据和指向下一个节点的链接。在有序单链表中,数据项按照特定的顺序排列。以下是Java中有序单链表节点的简单实现:

class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
        next = null;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

二分查找算法

二分查找算法的基本思想是将目标值与有序数组或列表中间的元素进行比较。如果目标值等于中间元素,则搜索成功;如果目标值小于中间元素,则在左侧子数组中继续搜索;如果目标值大于中间元素,则在右侧子数组中继续搜索。这个过程将不断重复,直到找到目标值或搜索范围为空。

Java实现

以下是在Java中实现有序单链表和二分查找的示例代码:

public class SortedLinkedList {
    ListNode head;

    // 插入新节点并保持有序
    public void insert(int val) {
        ListNode newNode = new ListNode(val);
        if (head == null || head.val > val) {
            newNode.next = head;
            head = newNode;
        } else {
            ListNode current = head;
            while (current.next != null && current.next.val < val) {
                current = current.next;
            }
            newNode.next = current.next;
            current.next = newNode;
        }
    }

    // 二分查找
    public ListNode binarySearch(int val) {
        ListNode left = head;
        ListNode right = null;
        while (left != null && left.val != val) {
            right = left;
            left = left.next;
        }
        return left;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

饼状图表示

使用Mermaid语法,我们可以创建一个饼状图来表示有序单链表中不同数值的分布情况:

链表元素分布 35% 25% 20% 10% 10% 链表元素分布 数值1 数值2 数值3 数值4 数值5

序列图表示

同样,我们可以使用Mermaid的序列图来表示二分查找过程中的步骤:

LN LL U LN LL U LN LL U LN LL U insert(10) Create new node insert(5) Insert before head binarySearch(5) Find node with value 5

结语

有序单链表和二分查找算法在处理有序数据时非常高效。通过本文的示例代码和图表,我们可以看到Java中如何实现这些数据结构和算法。掌握这些基础知识对于理解和设计更复杂的数据结构和算法至关重要。