boxmoe_header_banner_img

Hello! 欢迎来到不如画七的空间!

加载中

文章导读

09.链表总结


avatar
ensiezadi 2025年8月21日 59

定义链表:

链表基础

链表的属性

  • 单链表
  • 双链表
  • 循环链表(可以解决约瑟夫环问题)

存储方式

链表在操作系统中的存储一般都不是连续的

链表节点的定义方式

//单链表结构体
struct ListNode(){
    int val; //节点内存储的值
    ListNode *next; //设置单链表的指针
    ListNode(int x) : val(x),next(null){}
};
// C++中可以不加入构造函数,但是初始化的时候就不能赋值;
// 例如:
ListNode *head = new ListNode();
head -> val = 5;

//等同于有构造函数时的:
ListNode *head = new ListNode(5);

typedef struct LinkNode{
    int val;
    struct LinkNode *next;
}LinkList;
class Node{
    int val;
    Node next;
}

class Node{
    int val;
    Node pre;
    Node next;
}
class MyLinkList{

    // 链表的构造方法
    MyLinkList(){
    }

    //获取到第几个节点
    public int get(int index){

    }

    // 在头节点插入
    public void addOfHead(int val){

    }

    // 在尾节点插入
    public void addOfTail(int val){

    }

    // 在指定位置插入
    public void insertOfIndex(int index, int val){

    }

    // 删除指定节点
    public void delete(int index){

    } 
}

链表的常见操作

  • 增加一个节点(注意指针)
  • 删除一个节点
  • 找到一个节点(改该节点的值)

查找的时间复杂度是O(n),而数组是O(1); 删除的时间复杂度是O(1),而数组是O(n);

链表的删除操作:

  • [[02.移除链表元素]]
  • [[06.删除链表中倒数第n个节点]]

链表实现:[[03.设计链表]]

==为什么实现虚拟头节点来进行操作会很复杂==

  • 实现了单链表设计实现链表的基本功能
  • 实现了循环链表设计实现链表的基本功能
    • 首先头指针的初始化操作
    • 在头插法和尾插法时不同的操作

链表翻转:[[04.翻转链表]]、[[05.两两交换链表中的元素]]

==为什么要使用虚拟头节点来进行操作==

  • 普通的链表翻转很简单,注意循环条件,以及双指针的用法即可实现。

链表相交问题:[[07.链表相交]]、[[08.环形链表Ⅱ]]

  • 普通的比较很简单
  • 环形链表为什么是这样的


评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码
不如画七
2025 年 10 月
 123456
78910111213
14151617181920
21222324252627
282930