数据结构基础 - 链表操作
单元2 链表操作详解:插入、删除、读取及指针修改次数 以下针对四种链表类型(单链表、双链表、循环单链表、循环双链表),详细说明插入、删除、读取操作步骤及指针修改次数(仅统计已有节点的指针修改,不包括新节点初始化或删除节点释放)。 1. 单链表(Singly Linked List) 节点结构:数据 + next指针(指向后继) 插入操作(在节点A和B之间插入C): 步骤: 创建新节点C,设置 C.next = B(新节点初始化,不计入修改)。 修改A的 next 指针指向C:A.next = C。 指针修改次数:1次(仅修改前驱节点A的指针)。 边界情况: 头部插入:修改头指针指向C(头指针修改不计入节点指针修改)。 尾部插入:同一般情况(修改原尾节点的 next)。 删除操作(删除节点B,A为其前驱): 步骤: 修改A的 next 指针指向B的后继:A.next = B.next。 释放B(不计入指针修改)。 指针修改次数:1次(仅修改前驱节点A的指针)。 边界情况: 删除头节点:修改头指针指向原头节点的后继(头指针修改不计入节点指针修改)。 删除尾节点:修改倒数第二节点的 next 为 null(1次修改)。 读取操作: 仅支持顺序访问:从头节点遍历,时间复杂度 O(n)。 不支持随机访问(无索引)。 2. 双链表(Doubly Linked List) 节点结构:数据 + next指针(指向后继) + prev指针(指向前驱) 插入操作(在节点A和B之间插入C): 步骤: 创建新节点C,设置 C.prev = A, C.next = B(新节点初始化)。 修改A的 next 指针指向C:A.next = C。 修改B的 prev 指针指向C:B.prev = C。 指针修改次数:2次(修改前驱A的 next 和后继B的 prev)。 边界情况: 头部插入:需修改原头节点的 prev 指向C(1次修改)。 尾部插入:需修改原尾节点的 next 指向C(1次修改)。 删除操作(删除节点B): ...