为了账号安全,请及时绑定邮箱和手机立即绑定

java linked list

标签:
杂七杂八
Java中的LinkedList——常用数据结构及应用

在Java编程中,LinkedList是一种常用的数据结构,它可以用来实现双向链表。LinkedList主要提供了三种链表类型:单链表、双链表和循环链表。每种链表都有自己独特的特点和使用场景。

1. 单链表

单链表是一个只有一个头节点的链表,它的每个节点都包含一个数据元素和一个指向下一个节点的指针。单链表的特点是简单易用,插入和删除操作较为方便,但在访问某个节点的数据时需要遍历整个链表。

1.1 定义及使用

public class SingleLinkedList {
    Node head; // 头节点

    // 定义节点类
    static class Node {
        int data; // 数据元素
        Node next; // 指向下一个节点的指针

        Node(int d) {
            data = d;
            next = null;
        }
    }

    // 向链表尾部添加节点
    public void append(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
        } else {
            Node temp = head;
            while (temp.next != null) {
                temp = temp.next;
            }
            temp.next = newNode;
        }
    }

    // 删除指定位置的节点
    public void deleteAtPosition(int position) {
        if (position == 0) {
            head = head.next;
            return;
        }

        Node temp = head, prev = null;
        for (int i = 0; i < position - 1; i++) {
            prev = temp;
            temp = temp.next;
        }

        if (temp == null) return;

        prev.next = temp.next;
    }

    // 打印链表
    public void print() {
        Node temp = head;
        while (temp != null) {
            System.out.print(temp.data + " -> ");
            temp = temp.next;
        }
        System.out.println("null");
    }
}

2. 双链表

双链表是由两个指针(prev和next)组成的链表,每个节点除了包含数据元素外,还需要包含一个指向下一个节点的指针以及一个指向前一个节点的指针。双链表的特点是可以快速定位到指定节点,以及在运行时进行插入和删除操作更加高效。但需要注意的是,双链表的内存占用较大,因为它需要额外的指针空间。

2.1 定义及使用

public class DoubleLinkedList {
    Node head, tail; // 头节点和尾节点

    // 定义节点类
    static class Node {
        int data; // 数据元素
        Node prev, next; // 指向前一个节点的指针以及指向下一个节点的指针

        Node(int d) {
            data = d;
            prev = null;
            next = null;
        }
    }

    // 在链表尾部添加节点
    public void append(int data) {
        Node newNode = new Node(data);
        if (tail == null) {
            head = newNode;
            tail = newNode;
        } else {
            tail.next = newNode;
            tail = newNode;
        }
    }

    // 删除指定位置的节点
    public void deleteAtPosition(int position) {
        if (position == 0) {
            head = head.next;
            return;
        }

        Node temp = head, prev = null;
        for (int i = 0; i < position - 1; i++) {
            prev = temp;
            temp = temp.next;
        }

        if (temp == null) return;

        prev.next = temp.next;
    }

    // 打印链表
    public void print() {
        Node temp = head;
        while (temp != null) {
            System.out.print(temp.data + " -> ");
            temp = temp.next;
        }
        System.out.println("null");
    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消