数据结构与算法

单链表的基本操作-python

1.节点类

c 复制代码
class ListNode:
    def __init__(self, value:int):
        self.val: int =value
        self.next : listNode | None = None

2.初始化链表

c 复制代码
n1 = ListNode(1)
n2 = ListNode(2)
n3 = ListNode(3)
n4 = ListNode(4)
n5 = ListNode(5)
# 构建节点之间的引用
n1.next = n2
n2.next = n3
n3.next = n4
n4.next = n5

3.遍历链表

c 复制代码
# 将链表的头结点赋予
currentnode = n1
# 打印头结点
print(currentnode.val)
# 判断当前节点是否为None
while currentnode!=None:
    # 若不为None,则打印当前节点值
    print(currentnode.val)
    # 指向下一节点
    currentnode = currentnode.next

4. 查找节点

c 复制代码
# 查找节点,
def find(List_data:ListNode,value:int):
    # 判断节点是否为空
    if List_data == None:
        raise ValueError("数据异常") 
    else :
        # 遍历数据
        currentnode = List_data
        while currentnode != None:
            if currentnode.val != value:
                print("当前节点值为:{}不是要查找数据".format(currentnode.val))
                currentnode = currentnode.next
            else:
                print("查找到{}".format(currentnode.val))
                return currentnode

result = find(n1,3)

5.插入节点

c 复制代码
# 插入节点
def insert_node(List_data: ListNode,Node: ListNode,value:int):
    # 判断输入数据不为空
    index = 0
    if List_data ==None:
        raise ValueError("输入链表为空")
    else:
        # 超找节点,并插入数据
        while List_data != None:
            if List_data.val !=value:
                print("遍历到第{}".format(index))
                List_data = List_data.next
                index += 1
            else:
                # n1->n3
                # n1->n2->n3
                # 将n1节点指向(n3)赋予一个临时变量listNode_temp
                listNode_temp = List_data.next
                # 插入节点(n2),插入节点的下一节点(n3)为原n1节点的指向(listNode_temp:n3)
                Node.next = List_data.next
                # 当前节点(n1)指向插入节点(n2)
                List_data.next = Node
                # 指向链表的下一指向
                List_data = List_data.next
p = ListNode(9)
insert_node(n1,p,3)

6.删除节点

c 复制代码
# 删除节点
def remove_node(List_data: ListNode,value:int):
    # 判断输入数据不为空
    index = 0
    if List_data ==None:
        raise ValueError("输入链表为空")
    else:
        # 超找节点,并插入数据
        while List_data != None:
            if List_data.val !=value:
                print("遍历到第{}".format(index))
                List_data = List_data.next
                index += 1
            else:
                # n1->n2->n3
                # n1->n3
                # 将n1节点指向(n3)赋予一个临时变量listNode_temp
                listNode_temp = List_data.next
                # 插入节点(n2),插入节点的下一节点(n3)为原n1节点的指向(listNode_temp:n3)
                Node = listNode_temp.next
                # 当前节点(n1)指向插入节点(n2)
                List_data.next = Node
                # 指向链表的下一指向
                List_data = List_data.next
p = ListNode(9)
# 删除节点数值为3后面的首个节点
insert_node(n1,3)

综上完成单链表的基本操作

相关推荐
SZYSK5 小时前
OpenHarmony 上读卡、推理和双屏刷新抢 CPU:核验机与消费机的调度差
物联网·算法·harmonyos·1024程序员节
Ivanqhz6 小时前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节
Mr. zhihao6 小时前
Deep Agent 架构深度解析:主Agent与子Agent完整交互机制与核心参数作用
python·ai·langgraph·deepagent
狗凯之家源码网6 小时前
iOS C2 V2 与 Python FastAPI 全链路远控系统深度评测
python·ios·fastapi
lpfasd1236 小时前
推荐算法进化史
算法·机器学习·推荐算法
Pniubi6 小时前
力扣543二叉树的直径(深度优先搜索法(递归))
算法·leetcode·职场和发展
超级架构师6 小时前
让 Fortran 模型自己调用 Agent:原生 Fortran 2008 实现深度剖析
人工智能·python·架构·机器人·开源·fortran
小蒜学长6 小时前
基于Django+Vue喵汪联盟宠物领养系统的设计与实现(代码+数据库+LW)
后端·python·django·宠物领养系统·流程规范化
黎相思6 小时前
BTree
数据结构·b树·b+树
云边有个稻草人6 小时前
Prometheus Pushgateway教程:离线任务指标上报、Shell与Python示例、远程访问
开发语言·python·prometheus