python :单向链表的实现

(1)单向链表:

  • 单向链表:有一个头结点和一个尾部节点
  • 节点:每个节点有拥有一个元素域和指针域,尾节点的指针域指向空
    在这里插入图片描述
    (2)模拟单向链表
  • length() 链表的长度
  • is_empty() 判断链表是否为空
  • add_first(element) 向链表的头部添加元素
 def add_first(self,item):   #向头部添加元素
        """
        1.创建一个新的节点
        2.新节点指向下个节点
        3.将新节点设置为头结点
        """
        node = self.Node(item)     #创建的新节点
        if self.is_empty() :     #如果尾空,那么新节点指向None,并将新节点赋值与self._head
            node.next = None
            self._head = node
        else :
            node.next =self._head
            self._head = node
        self._size +=1
  • add_last(element) 向链表的尾部添加元素
    def add_last(self,item):    #向尾部添加元素
        """
        如果链表为空 :
        1.直接创建一个新的节点,指向为空
        如果链表非空:
        1.遍历整个链表直到尾部节点的前一个节点cur
        2.将新节点的下一下赋值给cur
        """
        if self.is_empty() :
            return False
        else :
            node = self.Node(item)
            node.next = None     #创建一个空节点
            cur = self._head
            while cur.next != None :
                cur = cur.next       #遍历到链表的最后一个节点
            cur.next= node
            self._size += 1
  • insert_element(element) 向链表中添加元素
 def insert_element(self,pros,element):
        if self.is_empty() or pros < 0 or pros >self._size :
            return False
        elif pros == 0 :    #如果指定下标为0,那么将新节点添加在链表头部
            self.add_first(element)
        else :
            node = self.Node(element)
            cur = self._head
            count = 0
            while cur.next != None :   #遍历到指定的下标处
                if count == pros -1 :
                    node.next = cur.next  
                    cur.next = node
                    break
                count += 1
                cur = cur.next
        self._size += 1
  • del_first() 删除头部节点
 def del_first(self):  #删除头部节点
        """
        如果链表为空:返回False
        如果链表非空:
        1.将当前结点的下一指向赋值于头结点
        """
        if self.is_empty() :
            return False
        cur = self._head
        self._head = cur.next
  • del_between() 删除指定位置的节点
 def del_between(self,pors): #删除指定位置的节点
        if self.is_empty() or pors < 0 or pors > self._size :
            return False
        elif pors == 0:
            self.del_first()
        else :
            cur = self._head
            count = 0
            while count < pors :
                if count == pors - 1:
                   cur.next = cur.next.next     #核心
                   break
                count += 1
                cur = cur.next
        self._size -= 1
  • change() 更新指定位置的节点元素
 def change(self,index,num):   #更新摸个指定节点的元素值
        if self.is_empty() or index < 0 or index > self._size :
            return False
        else :
            cur =self._head
            count = 0
            while count < index :
                cur = cur.next
                count += 1
            cur.data = num
  • get_list() 得到整个链表的节点元素
  def get_list(self):
        if self.is_empty() :
            return False
        cur = self._head
        while cur :
            print(cur.data,end=" ")
            cur = cur.next
  • get_index()得到指定位置的节点元素
        if self.is_empty() or pros < 0  or pros >self._size :
            return  False
        else :
            cur = self._head
            count = 0
            while count < pros :  #遍历到指定的节点
                cur = cur.next
                count += 1
            return cur.data

实现框架:

class LinkList :
    class Node :                 #节点类,存放节点的元素与指针
        def __init__(self,data):
            self.data = data
            self.next = None
    def __init__(self,node= None):       #初始化头节点
        self._head = node
        self._size = 0

猜你喜欢

转载自blog.csdn.net/Mr_zhangbz/article/details/84431069
今日推荐