Java\LeetCode刷题---链表专题

Java链表专题

**引言:**数组和链表都是线性表,数组在物理结构上进行顺序存储、链表在逻辑结构上进行顺序存储。面对数据量固定,频繁访问其中元素的需求,通常使用数组;面对数据量不固定,频繁进行插入和删除的需求,通常使用链表结构。

1.Java中的链表结构

1.1 ListNode

​ 虽然说是链表结构,但其通常用节点来表示,因为节点中存放着下一个节点的位置,因此只需要知道头结点,实际上就相当于知道了整个链表。而ListNode并不是Java标准库中定义好的类,如果在Java中使用需要自己进行定义:(但用LeetCode刷题是,不需要自己定义)

public class ListNode {
    // 结点的值
    int val;
    // 下一个结点
    ListNode next;
    // 节点的构造函数(无参)
    public ListNode() {
    }
    // 节点的构造函数(有一个参数)
    public ListNode(int val) {
        this.val = val;
    }
    // 节点的构造函数(有两个参数)
    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

1.2 java.util.LinkedList

​ Java中内置的链表结构是LinkedList,它是Java标准库提供的一个双向链表实现的类。它实现了List接口,因此它可以被视为一个列表,并提供了一系列方法来操作和管理链表的元素。LinkedList的特点是每个节点(元素)都包含了指向前一个节点和后一个节点的引用,这使得LinkedList在插入和删除元素时具有较高的灵活性和效率。然而,与ArrayList相比,LinkedList在随机访问元素时性能较差,因为需要沿着链表逐个查找元素。它其主要有以下方法:

LinkedList<Integer> linkedList = new LinkedList<>();
// 增加元素
linkedList.add(10);
linkedList.add(20);
// 在指定位置增加元素
linkedList.add(1,30);
// 在头部和尾部添加元素
linkedList.addFirst(5);
linkedList.addLast(40);
// 是否包含某个元素
linkedList.contains(30);
// 获取某个位置的元素
linkedList.get(0);
linkedList.getFirst();
linkedList.getLast();
// 修改
linkedlist.set(0,1);//将位置0改为1
// 大小
linkedlist.size();
// 判空
linkedlist.isEmpty();
// 输出
System.out.println("链表: " + linkedList); // 链表: [5, 10, 20, 30, 40]
// 删除元素
linkedList.removeFirst(); // 头部
linkedList.removeLast(); // 尾部
linkedList.remove(Integer.valueOf(20)); // 删除值为20的元素

2.链表基础操作题目

在链表基础操作的相关题目中有一些技巧:

  • 因为无论是插入操作还是删除操作,一般都需要找到指定位置的前一个。而头结点是没有前一个节点的,因此可以设置一个虚拟节点dummy,其指向头结点。
  • 在链表题目中,不要吝啬使用ListNode变量。

1.P2_两数之和

203. 移除链表元素

707. 设计链表

206. 反转链表

7.P92_反转链表 II

9.P61_旋转链表

10.P83_删除链表中的重复元素

3.递归相关题目

递归的要素包括以下两点:

  • 递归出口,即返回的地方,通常涉及到边缘条件
  • 递归调用,即如何通过不断调用自身来解决该问题

24. 两两交换链表中的节点

3.P21_合并两个有序链表

4.P23_合并K个升序链表

8.P25_K个一维数组翻转

11.P82_删除链表中的重复元素Ⅱ

4.双指针思想题目

链表中涉及到的双指针思想的题目主要跟环形链表有关,其解法主要是快慢指针法(还没见过用对撞指针的),这里通常要通过两个指针走过的步数来寻找环形链表的某个节点。

12.P141_环形链表

面试题 02.07. 链表相交

142. 环形链表 II

你可能感兴趣的:(LeetCode刷题记录,java,leetcode,链表)