链表的实现

本文介绍了如何使用Python实现一个单向链表,支持在头部、尾部添加和删除元素,指定位置插入或删除,以及对链表进行排序和部分复制。主要涉及链表的基本概念、节点类和链表类的设计与关键方法实现。
摘要由CSDN通过智能技术生成

目录

1.实现一个单向链表存储整数,并提供相关的操作:

1.1.提供在表头部和尾部添加、删除元素的功能;

1.2.提供在指定位置插入或删除一个元素的功能;

1.3.能够对链表从小到大进行排序;

1.4.能够根据输入,复制链表中指定的一部分(连续的部分)。

2.链表思想:

2.1节点类Node:- 属性:value(值)、next(下一节点)

2.2链表类LinkedList:- 属性:head(头节点) - 方法:尾部/头部插入删除,指定位置插入删除,排序,复制

2.3尾部插入:遍历到尾节点,将新节点作为尾节点next

2.4头部插入:将新节点next指向头节点,头节点更新为新节点

2.5指定位置插入:遍历找到位置,修改新老节点next引用

2.6删除也是类似通过修改引用删除节点

2.7排序通过逐步插入节点实现

2.8复制通过遍历并根据范围复制节点

3.源代码分析

这段代码定义了一个链表节点类Node,包含value和next属性。value表示节点中存储的元素值,next表示指向下一个节点的指针。


1.实现一个单向链表存储整数,并提供相关的操作:


1.1.提供在表头部和尾部添加、删除元素的功能;

1.2.提供在指定位置插入或删除一个元素的功能;

1.3.能够对链表从小到大进行排序;

1.4.能够根据输入,复制链表中指定的一部分(连续的部分)。


2.链表思想:

2.1节点类Node:- 属性:value(值)、next(下一节点)

2.2链表类LinkedList:- 属性:head(头节点) - 方法:尾部/头部插入删除,指定位置插入删除,排序,复制

2.3尾部插入:遍历到尾节点,将新节点作为尾节点next

2.4头部插入:将新节点next指向头节点,头节点更新为新节点

2.5指定位置插入:遍历找到位置,修改新老节点next引用

2.6删除也是类似通过修改引用删除节点

2.7排序通过逐步插入节点实现

2.8复制通过遍历并根据范围复制节点

3.源代码分析

# 定义链表节点类
class Node(object):
    def __init__(self, value=None, next=None):
        self.value = value  # 节点元素
        self.next = next  # 指针

  • 这段代码定义了一个链表节点类Node,包含valuenext属性。value表示节点中存储的元素值,next表示指向下一个节点的指针。

# 单链表类
class LinkedList(object):
    def __init__(self):
        self.head = Node()  # 创建头结点
        self.length = 0  # 初始化链表长度

  • 这段代码定义了单链表类LinkedList,其中包含一个头结点head和链表长度length的属性。

   

    def __len__(self):
        return self.length

  • __len__(self)方法重写了内置函数len(),用于返回链表的长度。

   def __iter__(self):  # 遍历列表节点
        for node in self.iter_node():
            yield node.value

  • __iter__(self)方法用于使链表可以进行迭代操作,通过yield生成节点的值。

   def iter_node(self):
        curnode = self.head.next
        while curnode.next != None:
            yield curnode
            curnode = curnode.next
        if curnode.next == None:
            yield curnode

  • iter_node(self)方法是一个生成器,用于迭代节点。它返回链表中的每个节点对象。

def head_insert(self, value):  # 链表头部插入
        node = Node(value)
        if self.head.next == None:
            self.head.next = node
            node.next = None
        else:
            tmp_head = self.head.next
            self.head.next = node
            node.next = tmp_head
        self.length += 1

  • head_insert(self, value)方法用于在链表头部插入新的节点。

  • 如果链表为空,将头指针指向新节点,并使新节点的next指针为None。

  • 如果链表不为空,将当前头指针节点存储到tmp_head变量,然后让头指针指向新节点,并将新节点的next指针指向原头指针节点。

  • 最后,增加链表长度。

  def head_del(self):  # 删除头结点,返回头结点的值
        if self.head.next == None:
            return False
        else:
            self.head = self.head.next
            self.length -= 1
            return self.head.value

  • head_del(self)方法用于删除头结点并返回头结点的值。

  • 如果链表为空,返回False。

  • 如果链表不为空,将头指针指向下一个节点,并减小链表长度,然后返回新的头结点的值。

   

 def append(self, value):  # 链表尾部添加节点
        node = Node(value)
        if self.length == 0:
            self.head.next = node
        else:
            curnode = self.head.next
            while curnode.next != None:
                curnode = curnode.next
            curnode.next = node
        self.length += 1

  • append(self, value)方法用于在链表尾部添加新的节点。

  • 如果链表为空,将头指针指向新节点。

  • 如果链表不为空,找到最后一个节点,使其next指针指向新节点。

  • 最后,增加链表长度。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yueqingll

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

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

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

打赏作者

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

抵扣说明:

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

余额充值