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. 两两交换链表中的节点的主要内容,如果未能解决你的问题,请参考以下文章