📜  链表的类型-单链,双链和循环链(1)

📅  最后修改于: 2023-12-03 15:42:08.012000             🧑  作者: Mango

链表的类型

链表是一种常见的数据结构,它通过节点之间的指针联系起来,每个节点包含数据和指向下一个节点的指针。链表的常见类型有单链表、双链表和循环链表。

单链表

单链表是链表的最基本类型,每个节点只包含一个指针指向下一个节点,最后一个节点指向空。单链表的优点是插入和删除节点容易,时间复杂度为O(1),但是查找某个节点需要遍历整个链表,时间复杂度为O(n)。

以下是单链表的结构体定义:

typedef struct node {
    int data;
    struct node *next;
} Node;

其中data表示节点的数据,next表示指向下一个节点的指针。

双链表

双链表是在单链表的基础上每个节点多了一个指针指向前一个节点。这样在删除和插入节点时,不仅需要更新前一个节点指向当前节点的指针,也需要更新后一个节点指向当前节点的指针。双链表的优点是在查找某个节点时,如果知道该节点的后继节点,时间复杂度为O(1)。但是每个节点多一个指针,消耗内存空间。

以下是双链表的结构体定义:

typedef struct node {
    int data;
    struct node *prev;
    struct node *next;
} Node;

其中data表示节点的数据,prev表示指向前一个节点的指针,next表示指向下一个节点的指针。

循环链表

循环链表和单链表或双链表的区别在于,最后一个节点的指针不再指向空,而是指向链表头部形成一个循环。循环链表的优点是可以很方便的从最后一个节点访问到第一个节点,但是对于删除和插入节点,需要像单链表或双链表一样更新相邻节点的指针。

以下是循环链表的结构体定义:

typedef struct node {
    int data;
    struct node *next;
} Node;

typedef struct {
    struct node *head;
} LinkedList;

其中head指向链表头部,最后一个节点的next指向head,形成循环。