我实现了一个链表,不需要设置自己回到头上?

2024-03-29 12:07:27 发布

您现在位置:Python中文网/ 问答频道 /正文

作为软件工程研究期间的一项任务,我必须用python实现我自己的列表类型,我是用链表实现的。你知道吗

从我过去的经验来看每当我用

self = self.next

我必须先保存我的头节点,然后再把头分配回自己。你知道吗

在这个链表实现中,我完全忘记了它,但是一切似乎都很好。你知道吗

不管怎样,我需要帮助,而不是'如何'做一些事情,我只是想了解它是如何工作而不保留和分配头节点回来,希望它是好的,谢谢!你知道吗

class MYList:
def __init__(self,*args):
    numargs = len(args)
    self.value = None
    self.next = None

    if(numargs == 0):
        pass
    elif(numargs == 1):
        self.value = args[0]
    elif(numargs == 2):
        self.value = args[0]
        self.next = MYList(args[1])
    else:
        self.value = args[0]
        self.next = MYList(*args[1:])

def get_value(self,k):
    i=0

    while(i<k):
        self = self.next
        i+=1

    return self.value

def set_value(self,k,v):
    i=0

    while(i<k):
        self = self.next
        i+=1

    self.value = v

def len(self):
    i=0

    while(self.next!=None):
        self = self.next
        i+=1

    return i+1


def append(self, *args):
    if(len(args) == 1):
        v=args[0]
        if(self.get_value(0) == None):
            self.set_value(0, v)
        else:
            i = 0

            while(self.next != None):
                self = self.next
                i += 1

            self.next = MYList(v)
    else:
        v=args[0]
        if(self.get_value(0) == None):
            self.set_value(0, v)
        else:
            i = 0

            while(self.next != None):
                self = self.next
                i += 1

            self.next = MYList(v)
            self.append(*args[1:])


def print(self):
    if(self.value == None):
        print("List is empty!")
    else:
        amount = self.len()
        for _ in range(amount):
            if(_ < amount-1):
                print(self.value,end=',')
            else:
                print(self.value)
            self=self.next

def pop(self,*args):
    if(len(args) == 0):
        count = self.len()
        head=self

        for _ in range(count-1):
            self = self.next

        v = self.value

        self = head

        for _ in range(count-2):
            self = self.next

        self.next = None

        return v

    elif(len(args)>1):
        raise Exception("Enter a key to pop only!")

    else:
        k = args[0]

        count = self.len() - 1

        if(k>count):
            raise Exception("Key too high!")
        elif(k==0):
            v=self.value
            self.value = self.next.value
            self.next = self.next.next
            return v
        else:
            head=self

            for _ in range(-1,k-1):
                self = self.next

            v = self.value
            temp_next = self.next

            self = head

            for _ in range(-1,k-2):
                self = self.next

            self.next = temp_next

            return v

Tags: inselfnoneforlenreturnifvalue