使用python实现链表

手写代码

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


class LinkListFunction(object):
    """
       此对象为Node对象的方法类
       """

    def __init__(self):
        self.linklistlength = 0  # 当前链表的长度

    def create_linklist_head(self, li):
        head = Node(li[0])
        for element in li[1:]:
            node = Node(element)
            node.next = head
            head = node
            self.linklistlength += 1
        return head

    def creat_linklist_tail(self, li):
        """
        尾插法
        :param li:
        :return:
        """
        head = Node(li[0])
        tail = head
        for element in li[1:]:
            node = Node(element)
            tail.next = node
            tail = node
            self.linklistlength += 1
        return head

    def print_linklist(self, lk):
        while lk:
            if not lk.next:
                print(lk.item)
                lk = lk.next
            else:
                print(lk.item, end=",")
                lk = lk.next

    def insert_linklist(self, index, element, curNode):
        """
        我们这里默认将插入的结点,插到我们的索引元素位置后方
        :param index:插入的索引值位置
        :param element: 插入的元素
        :param curNode: 首先指向的头结点
        :return:
        """
        lk_head = curNode  # 想用lk_head保存头指针
        number = 0  # 用于判断到达了我们需要寻找的位置
        if index > self.linklistlength:
            raise Exception("你的索引值超过了整个链表的最大长度")
        else:
            while True:
                if number == index:
                    break
                curNode = curNode.next
                number += 1
            self.linklistlength += 1
            p = Node(element)  # 创建一个链表节点
            p.next = curNode.next
            curNode.next = p
            curNode = lk_head  # 让curNode指针重新指向头结点

    def delete_linklist(self, index, curNode):
        """
        此为整个链表的删除算法,默认删除index后方的结点
        :param index:索引值
        :param curNode: 头结点
        :return:
        """
        lk_head = curNode
        number = 0  # 用与判断是否到达了我们需要寻找的位置
        if index > self.linklistlength:
            raise Exception("你的索引值超过了整个链表的最大长度")
        else:
            while True:
                if number == index:
                    break
                curNode = curNode.next
                number += 1
            self.linklistlength -= 1
            p = curNode.next  # 这是我们要删除的节点
            curNode.next = curNode.next.next
            del p


lkfunction = LinkListFunction()
lk = lkfunction.create_linklist_head([1, 2, 3, 4])
lkfunction.print_linklist(lk)
print(lkfunction.linklistlength)
lkfunction.insert_linklist(1, 10, lk)
lkfunction.print_linklist(lk)
print(lkfunction.linklistlength)
lkfunction.delete_linklist(0, lk)
lkfunction.print_linklist(lk)
print(lkfunction.linklistlength)

首先我们定义了一个Node对象,其接下来就是我们所有创建链表的结点对象

然后定义了一个对Node对象进行操作的一个方法类,其中包括封装好的创建链表中的头插法,尾插法,依次打印链表数据,插入结点数据,和删除加点数据。如果有什么看不懂的可以直接私信我哦!!!

输出结果

使用python实现链表_第1张图片

你可能感兴趣的:(算法,python,链表,开发语言)