JAVA:常用的链表指南

1、简述

链表是一种常见的数据结构,它通过一系列节点(Node)来表示一个序列。每个节点包含数据和指向下一个节点的引用。链表的种类有很多,包括单向链表、双端链表、有序链表和双向链表。本文将介绍这些链表的基本概念和 Java 实现。

2、单向链表(Singly Linked List)

单向链表是一种最基本的链表结构,每个节点只包含一个指向下一个节点的引用。链表的第一个节点称为头节点(head),最后一个节点的下一个引用指向 null,以下是单向链表的实例:

class SinglyLinkedList {    private Node head;
    private static class Node {        int data;        Node next;
        Node(int data) {            this.data = data;            this.next = null;        }    }
    public void add(int data) {        Node newNode = new Node(data);        if (head == null) {            head = newNode;        } else {            Node current = head;            while (current.next != null) {                current = current.next;            }            current.next = newNode;        }    }
    public void printList() {        Node current = head;        while (current != null) {            System.out.print(current.data + " ");            current = current.next;        }    }
    public static void main(String[] args) {        SinglyLinkedList list = new SinglyLinkedList();        list.add(1);        list.add(2);        list.add(3);        list.printList(); // 输出: 1 2 3    }}

3、双端链表(Doubly Ended Linked List)

双端链表是一个扩展的单向链表,它在链表中维护对最后一个节点(尾节点)的引用,以便于在链表末尾进行快速插入操作,以下是双端链表的实例:

class DoublyEndedLinkedList {    private Node head;    private Node tail;
    private static class Node {        int data;        Node next;
        Node(int data) {            this.data = data;            this.next = null;        }    }
    public void addLast(int data) {        Node newNode = new Node(data);        if (tail == null) {            head = tail = newNode;        } else {            tail.next = newNode;            tail = newNode;        }    }
    public void printList() {        Node current = head;        while (current != null) {            System.out.print(current.data + " ");            current = current.next;        }    }
    public static void main(String[] args) {        DoublyEndedLinkedList list = new DoublyEndedLinkedList();        list.addLast(1);        list.addLast(2);        list.addLast(3);        list.printList(); // 输出: 1 2 3    }}

4、有序链表(Sorted Linked List)

有序链表是一种链表,其中元素按升序排列。每次插入新元素时,链表会自动将其插入到正确的位置以保持顺序,以下是有序链表的实例:

class SortedLinkedList {    private Node head;
    private static class Node {        int data;        Node next;
        Node(int data) {            this.data = data;            this.next = null;        }    }
    public void add(int data) {        Node newNode = new Node(data);        if (head == null || head.data >= newNode.data) {            newNode.next = head;            head = newNode;        } else {            Node current = head;            while (current.next != null && current.next.data < newNode.data) {                current = current.next;            }            newNode.next = current.next;            current.next = newNode;        }    }
    public void printList() {        Node current = head;        while (current != null) {            System.out.print(current.data + " ");            current = current.next;        }    }
    public static void main(String[] args) {        SortedLinkedList list = new SortedLinkedList();        list.add(3);        list.add(1);        list.add(2);        list.printList(); // 输出: 1 2 3    }}

5、双向链表(Doubly Linked List)

双向链表是一种链表,其中每个节点包含指向前一个节点和后一个节点的引用。这使得在链表中可以向前和向后遍历,以下是双向链表的实例:

class DoublyLinkedList {    private Node head;    private Node tail;
    private static class Node {        int data;        Node prev;        Node next;
        Node(int data) {            this.data = data;            this.prev = null;            this.next = null;        }    }
    public void add(int data) {        Node newNode = new Node(data);        if (head == null) {            head = tail = newNode;        } else {            tail.next = newNode;            newNode.prev = tail;            tail = newNode;        }    }
    public void printList() {        Node current = head;        while (current != null) {            System.out.print(current.data + " ");            current = current.next;        }    }
    public void printListReverse() {        Node current = tail;        while (current != null) {            System.out.print(current.data + " ");            current = current.prev;        }    }
    public static void main(String[] args) {        DoublyLinkedList list = new DoublyLinkedList();        list.add(1);        list.add(2);        list.add(3);        list.printList(); // 输出: 1 2 3        System.out.println();        list.printListReverse(); // 输出: 3 2 1    }}

6、总结

本文介绍了四种常见的链表及其 Java 实现:单向链表、双端链表、有序链表和双向链表。每种链表都有其独特的特点和应用场景。单向链表结构简单,适合于基础数据存储;双端链表适合于需要快速在末尾插入的场景;有序链表适用于需要保持顺序的数据集合;双向链表则适合于需要双向遍历的复杂应用。通过这些示例,希望您能更好地理解链表结构及其在 Java 中的实现。

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/87744.html

(0)
guozi's avatarguozi
上一篇 2024年6月3日 下午2:43
下一篇 2024年6月3日 下午2:45

相关推荐

  • yoast seo教程

    如果你是一个网站管理员,想要让自己的网站在搜索引擎上更容易被发现,那么你一定不能错过Yoast SEO教程。Yoast SEO是一款强大的SEO插件,它可以帮助你优化网站内容,提高…

    行业资讯 2024年4月12日
    0
  • 为什么选择韩国VPS服务器?

    你是否曾经想过,为什么越来越多的人选择韩国VPS服务器?或许你对VPS服务器还不太了解,但是它却是当今互联网服务器行业中备受关注的热门选择。那么,什么是VPS服务器?它有哪些优势?…

    行业资讯 2024年3月28日
    0
  • 常熟seo网站优化软件

    你是否听说过SEO?它是如何影响着我们的网络世界?如果你对这个词语还不熟悉,那么就让我来为你揭开它的神秘面纱。今天,我们将聚焦在常熟这个城市,探究其SEO市场的概况。随着互联网的发…

    行业资讯 2024年3月22日
    0
  • ip被网站屏蔽,网站被safari屏蔽

    你是否曾经打开过一个网站,却发现它被你的iOS系统屏蔽而无法正常访问?这是一个令人头疼的问题,也是互联网行业面临的挑战之一。那么为什么iOS会屏蔽网站呢?它对网站有何影响呢?如何检…

    行业资讯 2024年5月14日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注