美文网首页
python3 实现链表的相关操作

python3 实现链表的相关操作

作者: cca1yy | 来源:发表于2019-01-24 11:13 被阅读0次
# linklist.py

# 初始化链表内每个节点的类,每个节点包含一个数据域和一个指针域
#__init__这种带双线的函数理解为创建类的对象时会自动调用的函数,类似于java的构造函数
class linkNode:
    def __init__(self, data, p = 0): # 链表节点初始化时,就有一个数据域和指针域,数据域是初始化时入参决定,指针域默认为空
        self.data = data
        self.next = p

class linkList:
    def __init__(self):
        self.head = None # 初始化时,只有一个头结点

    # 通过待插入链表的数据,依次生成各个链表的节点(尾插法,插入data),data是一个数组,存储了n个待插入链表的数据
    def initListTail(self, data):
        self.head = linkNode(data[0]) # 创建头结点,即第一个有值节点
        p = self.head # p 代表了链表的头结点,因此可以使用p.data和p.next访问链表节点的两个域
        for i in data[1:]:
            node = linkNode(i)
            p.next = node
            p = p.next

    # 判断链表是否为空
    def isEmpty(self):
        p = self.head
        if p.next == 0:
            print("The linkList is empty!")
            return 1 # 方便后续根据if语句调用该判断函数
        else:
            print("The linkList is not empty!")
            return 0

    # 遍历链表并输出,用','隔开
    def readList(self):
        if self.isEmpty():
            exit(0)
        p = self.head
        while p:
            print(p.data, end = ',')
            p = p.next
        print('')

    # 取链表长度
    def getLength(self):
        if self.isEmpty():
            exit(0)
        p = self.head
        length = 0
        while p:
            length += 1
            p = p.next
        print('length of the linkedList:', length)

    # 在索引值为 index 的节点后插入节点key
    def insertElem(self, key, index):
        p = self.head
        j = 1
        while p and j < index:
            p = p.next
            j += 1
        if(p == 0 or j > index):
            exit(0)
            print("insert error!")
        node = linkNode(key)
        node.next = p.next
        p.next = node
        print("inserted linkList!")
        self.readList()

    # 删除第 index 个节点后的那一个节点
    def deleteElem(self, index):
        p = self.head
        j = 1
        while p and j < index:
            p = p.next
            j += 1
        if (p == 0 or j > index):
            exit(0)
            print("delete error!")
        q = p.next
        p.next = q.next
        print("delete elem successful!")
        self.readList()

    # 反转链表并输出反转后链表的头结点
    def reverseLinkedList(self):
        pReverseHead = None
        pNode = self.head
        pPrev = None

        # 循环并反转
        while pNode:
            pNext = pNode.next # 首先保存pNode原本指向的下一个节点,这样在解除它们指向关系时,原下一个节点不会丢失

            # 若pNext == 0, 则说明pNone到达原顺序的最后一个节点,即反转后链表的头结点
            if (pNext == 0):
                pReverseHead = pNode

            pNode.next = pPrev # 将节点的next指针指向它的前一个节点
            pPrev = pNode
            pNode = pNext

        # 打印反转后的链表
        print("reversed linkedList:", end = ' ')
        p = pReverseHead
        while p:
            print(p.data, end = ",")
            p = p.next
        print("")
        return pReverseHead


if __name__ == "__main__":
    data1 = [1, 2, 3, 4, 5]
    data2 = []
    linkedList = linkList()
    linkedList.initListTail(data1) 
    linkedList.readList() #输出结果为1,2,3,4,5,
    linkedList.getLength() #输出结果为lenth of the LinkList: 5
    linkedList.insertElem(6, 3) #输出结果为1,2,3,6,4,5,
    linkedList.deleteElem(3) #1,2,3,4,5,
    pReverseHead = linkedList.reverseLinkedList() #reversed linkedList: 5,4,3,2,1,
    print("pReverseHead = ", pReverseHead.data) # pReverseHead =  5

相关文章

  • python3 实现链表的相关操作

  • 链表相关

    总结一下链表相关的操作 单链表节点的定义 实现单向链表的反向 删除单链表的所有节点

  • 05 (1)| javascript实现单链表

    在了解链表的基本结构和相关操作的原理,我们可以使用Javascript来实现链表以及其相关的增删该查工作了。 下面...

  • openssl相关数据结构的设计

    hash表 数据结构:使用链表数组实现 相关接口 内存分配 内存相关数据结构 内存操作相关接口 CRYPTO_me...

  • 链表

    文章结构 链表的定义 链表的插入和删除操作 链表的特性 常见的链表结构 自定义链表 链表的经典操作 使用链表实现L...

  • 链表的相关操作

  • Java常用类库与技巧-集合

    一 数据结构常见问题 数组和链表的区别;链表的操作,如反转,链表环路检测,双向链表,循环链表相关操作;队列,栈的应...

  • 系统编程(3)

    使用链表实现进出排队系统 链表的函数的声明 对于链表头文件各种操作具体功能的实现

  • 数据结构-栈

    栈的特点 先进后出 栈的相关操作都是通过栈顶位置进行相关操作的 栈的接口抽象 栈可以通过线性表直接实现(链表、数组...

  • 单链表算法题整理(思路详解)

    前一篇文章中记录了单链表的实现和基本操作,在此基础上,本次整理了单链表的相关常见算法题的思路和C语言实现,留作复习...

网友评论

      本文标题:python3 实现链表的相关操作

      本文链接:https://www.haomeiwen.com/subject/dkryjqtx.html