Python 单链表——头插尾插、查询、插入、删除、链表反转操作

# 定义结点类
class Node:
    def __init__(self,data=0):
        self.data = data
        self.next = None
    def getData(self):
        return self.data
    def getNext(self):
        return self.next
    def setData(self,newdata):
        self.data = newdata
    def setNext(self,newnext):
        self.next = newnext

class UnorderedList:
    def __init__(self):
        self.head = Node()
        self.tail = Node()
        self.head=self.tail
#     整表创建——头插法
    def create_head(self,l):
        for i in range(len(l)):
            self.add_head(l[i])
    def add_head(self,data):
        tmp = Node(data)
        tmp.setNext(self.head) 
        self.head = tmp
        
#     整表创建——尾插法
    def create_tail(self,l):
        for i in range(len(l)):
            self.add_tail(l[i])
    def add_tail(self,data):
        tmp = Node(data)
        self.tail.setNext(tmp)
        self.tail =tmp
        
#     寻找元素
    def search(self,data):
        current = self.head
        Found = False
        while current != None and not Found:
            if current.getData() == data:
                Found = True
            else:
                current = current.getNext()
        print("Found:" + str(Found))
    
#     在任意位置插入元素    
    def insert(self,n,data):
        current = self.head
        for i in range(1,n):
            current = current.getNext()
        tmp = Node(data)
        tmp.setNext(current.getNext())
        current.setNext(tmp) 
        
#     删除元素    
    def remove(self,data):
        current = self.head
        previous = None
        Found = False
        while current != None and not Found:
            if current.getData() == data:
                Found = True
            else:
                previous = current
                current = current.getNext()
        if Found:
            previous.setNext(current.getNext())
            del current # 释放空间
        else:
            print("Remove:Not found!")

#    列表反转       简单理解就是把指向箭头全部反向
    def reverse(self):
        pre = None    # 定义当前节点的前一个元素
        while self.head:   
            nex = self.head.getNext()  #定义指定节点的后一个元素
            self.head.setNext(pre)   #将当前节点的指针指向前一个元素
            pre = self.head         #依次前移,直至当前节点为空
            self.head = nex           
# 重新定义一个头结点,并指向反转后的第一个元素            
        self.head = Node(0)
        self.head.setNext(pre)

            
# 从头结点后的第一个元素开始输出    
    def display(self):
        p = self.head.getNext()
        while p:
            print(p.getData())
            p = p.getNext()   
            
# 测试
if __name__=='__main__':    
    list1 = UnorderedList()
    list1.create_tail([28,3,5,6,12,89,51])
    list1.insert(1,35)
    list1.remove(52)
    list1.remove(89)
    list1.search(8)
    list1.reverse()
    list1.display()

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值