python单链表的基本操作

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None


# 头插法  无头节点
class OpeareLink:
    def __init__(self):
        self.current_node = None

    def add(self, data):
        node = Node(data)
        node.next = self.current_node
        # 指针始终指向当前节点
        self.current_node = node

    def print_node(self):
        cur_node = self.current_node
        while cur_node:
            print(cur_node.data)
            cur_node = cur_node.next

    def is_empty(self):
        return self.current_node is None

    def get_length(self):
        cnt = 0
        cur = self.current_node
        while cur:
            cnt += 1
            cur = cur.next
        return cnt

    def insert_node(self, data, index):
        cur = self.current_node
        if index <= 0 or cur is None:
            self.add(data)
        else:
            cnt = 0
            while cur.next:
                if cnt == index:
                    break
                cnt += 1
                cur = cur.next
            node = Node(data)
            node.next = cur.next
            cur.next = node

    def delete_node(self, index):
        if self.is_empty() or index <= 0:
            return

        if index == 1:
            self.current_node = self.current_node.next
        else:
            cnt = 2
            pre_node = self.current_node
            cur = pre_node.next
            while cur:
                if index == cnt:
                    break
                pre_node = cur
                cur = pre_node.next
                cnt += 1
            # index大于链表的情况
            if cur is None:
                pre_node.next = None
                return
            pre_node.next = cur.next


# 尾插法   有头节点
class OperateLink1:
    def __init__(self):
        # 定义一个头节点,当前指针位置在头节点处
        self.head = Node(0)
        self.current_node = self.head

    def add(self, data):
        # 新建节点
        node = Node(data)
        # 当前节点指向新建节点
        self.current_node.next = node
        # 将指针移动到新建的节点上
        self.current_node = node

    def print_node(self):
        cur_node = self.head.next
        while cur_node:
            print(cur_node.data)
            cur_node = cur_node.next


if __name__ == "__main__":
    data_list = [1, 6, 7, 9, 2]

    # 头插法
    test = OpeareLink()
    for i in data_list:
        test.add(i)
    # current_node = test.current_node
    # while current_node:
    #     print(current_node.data)
    #     current_node = current_node.next
    # test.print_node()
    # print(test.is_empty())
    # test.insert_node(3, 4)
    # test.print_node()
    test.delete_node(6)
    test.print_node()
    # 尾插法
    # test1 = OperateLink1()
    # for i in data_list:
    #     test1.add(i)
    # test1.print_node()

 

### Python 单链表基本操作实现教程 #### 创建节点类 为了构建单链表,首先需要定义一个`Node`类来表示链表中的各个节点。每个节点包含两个属性:数据项(`data`)以及指向下一个节点的链接(`next`)。 ```python class Node: def __init__(self, data=None): self.data = data # 节点存储的数据 self.next = None # 下一节点,默认为None ``` #### 构建单链表类 接着定义一个`SingleLinkedList`类用于管理这些节点并提供各种操作接口。 ```python class SingleLinkedList: def __init__(self): self.head = None # 初始化头指针为空 # 插入新节点到头部 def insert_at_beginning(self, new_data): new_node = Node(new_data) # 新建节点对象 new_node.next = self.head # 将新建节点的下一跳设置成当前head所指位置 self.head = new_node # 更新head至新的首节点 # 在指定位置插入元素 def insert_after(self, prev_node, new_data): if not isinstance(prev_node, Node): raise ValueError("prev_node must be a Node instance") # 检查前驱结点合法性 new_node = Node(new_data) new_node.next = prev_node.next # 连接前后两部分 prev_node.next = new_node # 修改前驱结点的next域指向新加入的节点 # 添加到列表尾部 def append(self, new_data): new_node = Node(new_data) if self.head is None: # 如果是空链表,则直接作为第一个元素 self.head = new_node return last = self.head # 否则遍历到最后一个元素处再添加 while(last.next): last = last.next last.next=new_node # 把最后一个元素的next设为我们要加进去的新node # 打印整个链表的内容 def print_list(self): temp = self.head # 设置临时变量temp等于头指针head result = [] while(temp): result.append(str(temp.data)) temp = temp.next # 移动游标直到遇到null为止 print(' -> '.join(result)) # 输出所有节点值组成的字符串形式的结果 ``` 通过上述代码实现了单链表的主要功能,包括向链表开头、中间和结尾插入新节点的功能,并提供了打印链表的方法以便于查看链表状态[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值