Python的单向链表实现

思路

链表由节点组成,先规定节点(Node),包含data和指向下个节点的next

  1. 初始化

    data当然就是传入的data了,next指向None

  2. 添加

    分两种情况:

    1. 链表为空,那么头节点和尾节点都指向新插入的节点
    2. 链表不为空,那么直接在尾部添加即可
  3. 遍历

    因为只有链表的尾节点的next是指向None的,所以可以根据这点来从头遍历

  4. 删除某个节点

    删除的时候分3种情况:

    1. 头节点,此时更改head指向的节点就好了
    2. 尾节点,此时只需将尾节点的前一个节点(prev)的next指向None即可
    3. 中间的节点,此时要将此节点的前一个节点的(prev)的next指向后续节点的(Current.next)
  5. 搜寻

    遍历查找即可

  6. 清空链表

    将头节点和尾节点都置为None即可

class Node:
    def __init__(self,data):
        self.next = None
        self.data = data
        
class SinglyLinkedList:
    def __init__(self):
        self.head = None	#头节点
        self.tail = None	#尾节点
        self.size = 0	#链表长度

    def append(self,data):
        node = Node(data)
        if self.tail:	#如果链表不为空
            self.tail.next = node
            self.tail = node
        else:
            self.head = node
            self.tail = node #如果这是第一个插入的节点那么头和尾都指向此节点
        self.size += 1

    def iter(self):
        '''遍历链表'''
        current = self.head
        while current:
            value = current.data
            current = current.next
            yield value

    def delete(self,data):
        '''根据数据删除节点'''
        current = self.head
        prev = self.head
        while current:
            if current.data == data:
                if current == self.head:
                    self.head = current.next
                elif current == self.tail:
                    prev.next = None
                    self.tail = prev
                else:
                    prev.next = current.next
                self.size -= 1
                return
            prev = current
            current = current.next

    def search(self,data):
        '''搜寻某个节点'''
        for node in self.iter():
            if data == node:
                return True
            return False

    def clear(self):
        '''清空链表'''
        self.tail = None
        self.head = None
原文地址:https://www.cnblogs.com/MartinLwx/p/9606939.html