leetcode 每日一题 24. 两两交换链表中的节点

Posted nil_f

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 每日一题 24. 两两交换链表中的节点相关的知识,希望对你有一定的参考价值。

迭代法

思路:

按顺序交换对应两个节点位置,交换前用一个节点充当要交换的节点的前驱,交换节点后更新前驱的位置。

代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        start = ListNode(-1)
        start.next = head
        temp = start
        while temp.next and temp.next.next:
            first = temp.next
            second = temp.next.next
            first.next = second.next
            second.next = first
            temp.next = second
            temp = temp.next.next
        return start.next

递归法

思路:

从链表的头节点 head 开始递归,每次递归都负责交换一对节点。由 firstNode 和 secondNode 表示要交换的两个节点。下一次递归则是传递的是下一对需要交换的节点。若链表中还有节点,则继续递归。交换了两个节点以后,返回 secondNode,因为它是交换后的新头。在所有节点交换完成以后,我们返回交换后的头,实际上是原始链表的第二个节点。

代码:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution(object):
    def swapPairs(self, head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        first_node = head
        second_node = head.next
        first_node.next  = self.swapPairs(second_node.next)
        second_node.next = first_node
        return second_node

 

以上是关于leetcode 每日一题 24. 两两交换链表中的节点的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 24. 两两交换链表中的节点

LeetCode 24 两两交换链表中的节点

leetcode24-两两交换链表图解

LeetCode ——24. 两两交换链表中的节点

leetcode 24 - 两两交换链表中的节点

leetcode 24 两两交换链表中的节点