zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    Python之内置函数再总结
    内置函数
    函数递归
    字符编码之文件处理
    文件处理
    python1数据链接总结
    知识点练习day9
    第一周作业
    python1
    网络基础预习
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/9606939.html
Copyright © 2011-2022 走看看