Linked List链表基础介绍

本文介绍了链表的基础知识,包括链表的搜索、插入和删除操作。在链表搜索时,最坏情况下的时间复杂度为O(n)。在Java中实现单链表,插入操作的时间复杂度取决于插入位置。同时,文章提到了删除操作需要先遍历找到元素再执行删除。还提及了双链表的介绍和进一步的Java实现资料。
摘要由CSDN通过智能技术生成

链表介绍

链表的顺序由各个对象里的指针决定。

链表的搜索

遍历链表

// LIST-SEARCH(L,k) 在链表中搜索关键字为k的元素
x=L.head
while(x != null && x.key != k){
	x=x.next;   // 不相等则继续往后移动
}
return x;  // 返回指向该元素的指针

最坏情况下的时间复杂度:O(n), 因为有可能要搜索整个链表。

链表的插入

  1. 如果在最前端插入,让L.head指向x.prevx.next指向
// 元素x的关键字为key,将x插入到链表的前端. LIST-SEARCH(L,x)
x.next = L.head
if L.head != null
	L.head.prev = x
L.head = x
x.prev = null

时间复杂度:O(1)

链表的删除

将一个元素x从链表L中移除,要先遍历链表,找到该元素,再执行删除。

// LIST-DELETE(L,x)
if(x.prev != null){
	x.prev.next = x.next;   // x前一个元素的next指针指向x的后一个元素
}else {
	L.head = x.next
}
if(x.next !=null){
	x.next.prev = x.prev   // x后一个元素的prev指针指向x前一个元素
}

时间复杂度:O(n)

更多学习文档:
双链表的介绍和插入
在Java类中实现单链表

在Java中实现单链表

package com.carrie.algorithm;

/**
 * https://www.geeksforgeeks.org/implementing-a-linked-list-in-java-using-class/
 * <p>
 * 链表有多种形式,这里的是单链表
 * <p>
 * 一个节点有 data 和 next. next是指针,指向下一个节点. next prev都是指针,指针不放元素值,是作为顺序指向
 * [ Data |next]  ——>  [ Data |next]
 * head
 */
public class LinkedList {
   
    Node head; // head of list


    static class Node {
   
        int data;
        Node next;

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

    // **************DELETION BY KEY**************
    // method to insert a new node
    public static LinkedList insert(LinkedList linkedList, int data) {
   
        // 用 data 创建一个新Node
        Node newNode = new Node(data);
        // 如果 l.head 是空的,那么 让newNode 成为head
        if (linkedList.head == null) {
   
            linkedList.head = newNode;
        } else {
   
            Node last = linkedList.head;
            // 遍历linkedList, 直到最后一个节点。在末尾插入新节点,让最后一个节点的next指向新节点
            while (last.next != null) {
   
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值