数据结构Python版---链表理论基础(Day6)

1.1 🐏单链表:

单链表中的一个节点由 数据域(value/data) + 指针域(next) 组成,其中指针域指向下一个节点(即存放着下一个节点的地址),最后一个节点指针域指向为空。

在这里插入图片描述

1.2 🐺双链表

双链表中的一个节点由 数据域+ 两v指针域 组成,一个指针域指向上一个节点,一个指针域指向下一个节点(即存放上、下节点的地址),
头节点和尾节点中都有一个节点指针域指向为空。

在这里插入图片描述

1.3 🦊循环链表

循环列表:链表首尾节点相连
在这里插入图片描述

2.1 🐻链表存储方式

数组在内存中是连续分布
链表在内存中是非连续分布(散乱分布)
在这里插入图片描述

通过指针域将节点按顺序连接在一起

3.1 🐱链表定义

变量赋值,实际上是将node2所在内存中的地址复制给了node1的next属性,通过id(node1.next)来获取node2地址。

class ListNode:
    def __init__(self, value):
        self.val = value  # 数据域,存储节点的数据
        self.next = None  # 指针域,存储指向下一个节点的地址

# 创建一个简单的单链表
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)

# 变量赋值,实际上是将node2所在内存中的地址复制给了node1的next属性,通过id(node1.next)来获取node2地址。
node1.next = node2  
node2.next = node3  

# 遍历单链表并打印节点的数据
curr_node = node1   # 头节点
while curr_node:    # 从头节点开始遍历
    print(curr_node.val)
    curr_node = curr_node.next  # 指向下一个节点

4.1 🥛链表操作

4.1.1 删除节点

在这里插入图片描述

#---删除链表中的一个节点---#
class ListNode:
    def __init__(self, value):
        self.val = value
        self.next = None

def delete_node(head, val):
    # 如果头节点 head 的值就是要删除的值 val,则直接返回头节点的下一个节点 head.next,即删除头节点
    if head.val == val:
        return head.next  
        
    # 如果头节点 head 不是要删除的值,则从头节点 head 的下一个节点 head.next 开始查找                                 

    prev = head        # prev是前一个节点,cur是当前节点
    cur = head.next
   
    #  循环条件:只要 cur 不为空且当前节点 cur 存储的数据不等于 val
    while cur and cur.val != val:    # cur 和 cur.val != val
        prev, cur = cur, cur.next    # 继续遍历下一个节点

    
    # cur为空 或 cur 存储的数据等于 val, 删除节点
    if cur:
        prev.next = cur.next    # 将前一个节点指针域和下一个节点地址连接在一起,去掉当前节点

    return head    # 通过头节点来找到这段链表的每个节点

4.1.2 添加节点

在这里插入图片描述

#---在链表尾部添加一个节点---#
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val      # 存储节点的值
        self.next = next    # 存储指向下一个节点的引用

def add_node(head, val):
    new_node = ListNode(val)   # 创建新节点
    # 如果头节点为空(原链表是空链表),直接返回新节点 
    if not head:              
        return new_node
   
    # 头节点不为空,设置当前节点为头节点        
    cur = head             
    while cur.next:           # 存在下一个节点,进入循环。 
        cur = cur.next        # 找到下一个节点
    cur.next = new_node       # 在尾节点后面添加新节点
    return head               # 返回头节点

⭐⭐⭐ 嘟嘟崽 ⭐⭐⭐
⭐⭐⭐ 点赞 + 收藏 ≠ 关注 ⭐⭐⭐
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圆嘟嘟2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值