学习日志015--python单链表

 创建

class Node:
    def __init__(self,data):
        # 数据域
        self.data = data
        # 链接域
        self.next = None

class LinkList:
    def __init__(self,):
        # 初始化头节点
        self.head = None
        # 记录链表的长度
        self.size = 0

增加

#头插
    def insert_head(self,value):
        # 创建新节点
        node = Node(value)
        q = self.head
        # 头插
        while q:
            q = q.next
        node.next = self.head
        self.head = node
        # 插入成功,链表长度自增
        self.size += 1

    #尾插
    def insert_rear(self,value):
        # 创建新结点
        node = Node(value)
        # 判空,若为空则在头节点插入
        if self.is_empty():
            self.head = node
        else:
            # 不为空则遍历到最后一个结点插入新结点
            p = self.head
            # 遍历到结点链接域为None说明到达最后一个结点
            while p.next:
                p = p.next
            p.next = node
            # 添加成功,链表长度自增
        self.size += 1



    # 遍历链表
    def show(self):
        # 判空
        if self.is_empty():
            print("遍历失败")
            return
        else:
            # 创建临时变量
            q = self.head
            while q:
                print(f"{q.data}",end=" ")
                q = q.next
            print()
#任意位置插入
    def insert_any_index(self,value,index):
        # 判断位置是否合理
        if 1>index or index >self.size+1:
            print("插入失败")
        else:
            # 若为第一个元素,则使用头插法
            if index == 1:
                self.insert_head(value)
            else:
                node = Node(value)
                p = self.head
                i = 1
                # 将p指向要插入位置的前一个结点
                while i<index-1:
                    p = p.next
                    i += 1
                    # 新结点的链接域指向前结点的下链接域,前结点的链接域指向新结点d
                node.next = p.next
                p.next = node
                self.size += 1

删除

    def delete_head(self):
        if self.is_empty():
            print("删除失败")
            return
        else:
            self.head  = self.head.next
            self.size -= 1

    def delete_rear(self):
        if self.is_empty():
            print("删除失败")
            return
        elif self.size == 1:
            self.head =None
            self.size -= 1
        else:
            p = self.head
            while p.next.next :
                p = p.next
            p.next = p.next.next
            self.size -= 1


    def any_index_delete(self,index):
        if self.is_empty():
            print("删除失败")
            return
        else:
            if index == 1:
                self.delete_head()
                return
            i = 1
            p = self.head
            while i<index-1:
                p = p.next
                i+=1
            p.next = p.next.next
            self.size -= 1

查找与修改

    def revise_index(self,index,value):
        if self.is_empty() or not 1<=index<=self.size:
            print("修改失败")
            return
        else:
            i = 1
            p = self.head
            while i<index:
                p = p.next
                i += 1
            p.data = value

    def find_index(self,value):
        if self.is_empty():
            print("查找失败")
            return
        i = 1
        q = self.head
        while i<self.size:
            if q.data == value:
                print(f"查找成功,你要的数据在第{i}个结点")
                return i
            i += 1
            q = q.next
        else:
            print("查找失败")

    def revise_value(self,value,n_value):
        self.revise_index(self.find_index(value),n_value)
        return

转置

    def transposition(self):
        if self.is_empty():
            print("失败")
        p = self.head
        t = self.head
        while p.next:
            t = p.next
            p.next = t.next
            t.next = self.head
            self.head = t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值