Python 运行函数后,如何设置链接列表的新标题?

Python 运行函数后,如何设置链接列表的新标题?,python,linked-list,Python,Linked List,我为这个问题写了一个解决方案: 我的问题是如何在上面的代码中设置“head”,以便在函数末尾返回它?类似于[1,2,3,4]>[2,1,4,3]的基本示例;2显然是头,但我如何能包括这是我的代码 我曾想过在函数的开始或结束时做“head=head.next”,但这两种方法在我的脑海中都不起作用。因为如果我在开始时这样做,那么它会弄乱函数,如果我在主函数的末尾写这行,head.next将指向错误的对象(对于上一段给出的示例,它将指向“4”) 在这种情况下,虚拟节点会有帮助吗?我想在开头写“dum

我为这个问题写了一个解决方案:

我的问题是如何在上面的代码中设置“head”,以便在函数末尾返回它?类似于[1,2,3,4]>[2,1,4,3]的基本示例;2显然是头,但我如何能包括这是我的代码

我曾想过在函数的开始或结束时做“head=head.next”,但这两种方法在我的脑海中都不起作用。因为如果我在开始时这样做,那么它会弄乱函数,如果我在主函数的末尾写这行,head.next将指向错误的对象(对于上一段给出的示例,它将指向“4”)


在这种情况下,虚拟节点会有帮助吗?我想在开头写“dummy.next=head.next”。然后简单地返回dummy。接下来使用另一个变量,例如,
result

def swapPairs(self, head: ListNode) -> ListNode:
    result = head.next if head and head.next else head

    prev = curr = head
    nex = head.next
    while nex:
        # ...

    return result
或者使用递归简化任务:

def swapPairs(self, head: ListNode) -> ListNode:
    if head and (n2 := head.next):
        head.next, n2.next = self.swapPairs(n2.next), head
        return n2
    return head

在循环之前添加另一个指定的变量。例如
result=head.next if head和head.next else head
并在最后返回该变量。您是否忘记了函数末尾的
返回head
?这将解决您在
head=swapPairs(head)
@SergeBallesta可能是
head
head的问题。下一步取决于列表的长度。当然,它应该是。我不理解你的评论- Serge Ballesta -让我们考虑这个例子[1,2,3 4](头是1),在运行这个函数后,它变成[2,1,4~3]。所以现在不是head.next=4??但这是不正确的,因为我需要返回2!Schwobaseggl,抱歉我对链表还是比较陌生的。你的解决方案是否与我在问题最后一段中提出的相同?i、 e.在开始时引入虚拟节点,并简单地执行dummy.next=head.next?最后返回dummy.nextI没有检查您的逻辑。但是在循环之前,您知道最终将返回哪个节点作为更改列表的头,所以只需将其存储在变量中即可。您仍然需要检查您的逻辑。是的,正是我的意思——将其存储为变量。谢谢
def swapPairs(self, head: ListNode) -> ListNode:
    if head and (n2 := head.next):
        head.next, n2.next = self.swapPairs(n2.next), head
        return n2
    return head