微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从某个键开始到最后反转链表? 蟒蛇3

如何解决如何从某个键开始到最后反转链表? 蟒蛇3

我正在尝试在 python 中构造一个方法来反转从某个键开始到结尾的单链表。我知道如何反转整个链表,但我不会编码

def reverse(self,key)

  • key 不是节点而是值。

解决方法

答案是首先初始化一个双向链表,但我们将在这个场景中模拟它的用例,并在我们遍历时创建一个临时的“前一个”节点。

class LinkedList:
    def __init__(self):
        self.head = None
        self.tail = None

    def insert(self,key):
        node = Node(key)
        if self.tail:
            self.tail.next = node
            self.tail = node
        else:
            self.tail = self.head = node

    def reverse(self,key):
        first = []
        prev = None
        current,self.head,self.tail = self.head,self.tail,self.head
        while current:
            if current.value == key:
                first.append(current)

            current.next,current,prev = prev,current.next,current
        return first

    def list_nodes(self):
        res = []
        current = self.head
        while current:
            res.append(current.value)
            current = current.next
        return res


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


if __name__ == '__main__':
    lst = LinkedList()
    for i in range(100):
        lst.insert(i)
    res1 = lst.list_nodes()
    rev = lst.reverse(55)
    res2 = lst.list_nodes()

输出将是:

res1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]
res2 = [99,0]
rev = [<__main__.Node object at 0x00000271B63241C0>]  # A Node object at some location

这将反转并搜索该键并将其返回到列表中,最小的索引是最接近的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。