Data Struts——chain

    数据结构中的链表是经常面试的东西,它有一定难度,但是代码量有比较小,可以说是最最常见的一类白板编程,链表(linkedlist)chain和数组不同,它依靠节点中指针来确定顺序,物理上并不连续

    构造chain

     去年做过Java linked list的源码分析,显然个人并不能做的更好,现在只能用python复现一下:

    

class chainNode(object):
    __slots__ = ['value','next'] ##限定结点属性
    def __init__(self,value,node):
        self.value = value
        self.next = node

    def getValue(self):return self.value
    def getNext(self):return self.next
    def setValue(self,val):self.value=val
    def setNext(self,node):self.next=node

class chain(object):

    def __init__(self):
        self.size = 0
        self.head = None
    

    结点构造如上,chain的构造,属性包含长度size、头节点head,因为我们只想构造一个单链表,如果双链表需要再加一个tail尾结点,叙述思路很明显:chain的构造、chain的操作(API)、chain扩张(双链表、循环链表、哨兵)、复杂操作

    chain的基本操作

        

    ##add
    def addHead(self,val):
        node = chainNode(val)
        if self.head is None:
            self.head = node
            self.size == self.size + 1
            return
        node.setNext(self.head)
        self.head = node
        self.size == self.size + 1
        return
    def addLast(self,value):
        node = chainNode(value)
        if self.head is None:
            head = node
        else:
            current = self.head
            while current.getNext() != None:
                current = current.getNext()
            current.next = node
        return
    ##remove
    def remove(self,val):
        ##判断链表空
        current = self.head
        while current != None:
            if current.value == val:
                ##m没有判断删除的是不是尾巴结点,current.next可能为空
                current.value = current.next.value
                current.next = current.next.next
                return
            else:
                current = current.next
                
    ##insert
    def insert(self,pos,val):
        if pos > self.size:
            self.addLast(val)
        else:
            node = chainNode(val)
            current = self.head
            while pos > 1:
                current = current.getNext()
                pos = pos - 1
            node.next = current.next
            current.next = node
        return

    数据结构的基本操作目前我做的只有增删改查,其中还有还多坑,主要集中在边界检测,Awww..........


复杂链表(双向链表、循环链表、哨兵)

后续

leetcode

删除:删除指定节点
  删除指定值节点:如上
  删除倒数第n个结点:两个指针
移动:链表反转:三个指针,后俩反转,最后记得第一个结点的指针置空(生命危险 :))
合并:
环:判断是否有环、判断环的入口
        从尾到头输出结点:栈

线程安全的chain(阻塞实现和非阻塞实现)

以上全部后续!!!!!!



    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值