【数据结构】(二):单链表

单向链表

单向链表是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201018091831148.png#pic_center

节点实现

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

链表的节点是用一个类实现的

单链表的基本操作

  1. is_empty() 判断链表是否为空
  2. length() 链表长度
  3. travel() 遍历整个链表
  4. add(item) 链表头部添加元素
  5. append(item) 链表尾部添加元素
  6. insert(pos,item) 指定位置添加元素
  7. remove(item) 删除节点
  8. search(item) 查找结点是否存在

单链表的实现

class SingleLinkList(object):
   def __init__(self,node=None):
      self._head = node
      
   def is_empty(self):
      return self._head == None
   
   def length(self):
      cur = self._head
      count = 0
      while cur != None:
         count += 1
         cur = cur.next
      return count
   
   def travel(self):
      cur = self._head
      while cur != None:
         print(cur.elem,end=' ')
         cur = cur.next
      print('\n')

   
   def add(self,item):
      #链表头部添加元素
      node = Node(item)
      if self._head == None:
         self._head = node
      else:
         p = self._head
         node.next = p
         self._head = node
      
   
   def append(self,item):
      #链表尾部添加元素
      node = Node(item)
      if self.is_empty():
         self._head = node
      else:
         cur = self._head
         while cur.next != None:
            cur = cur.next
         cur.next = node
   
   def insert(self,pos,item):
      #在指定位置插入元素
      node = Node(item)
      if pos == 0:
         self.add(item)
      else:
         cur = self._head
         count = 0
         while(count < (pos-1)):
            cur = cur.next
            count+=1
         p = cur.next
         cur.next = node
         node.next = p
         
   
   def remove(self,item):
      
      cur = self._head
      pre = None
      while cur != None:
         if cur.elem == item:
            if cur == self._head:
               self._head = cur.next
            else:
               pre.next = cur.next
            break
         else:
            pre = cur
            cur = cur.next
   def search(self,item):
      cur = self._head
      while cur != None:
          if cur.elem == item:
             return  True
          else:
             cur = cur.next
      return False
if __name__ == "__main__":
   # l1 = SingleLinkList()
   # print(l1.is_empty())
   # l1.add(1)
   # l1.travel()
   node = Node(100)
   l2 = SingleLinkList(node)

   l2.append(2)
   l2.add(1)
   l2.insert(0,3)
   l2.insert(1,3)
   l2.travel()
   l2.remove(3)
   # l2.remove(3)
   l2.travel()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值