Practice Leetcode 24. 两两交换链表中的节点

it2023-07-14  69

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路1:太复杂了

class Solution: def swapPairs(self, head: ListNode) -> ListNode: res = ListNode(-1) # 代表返回结果的前驱节点 dbhead = None # 每一对数的起始节点 dbtail = res # 每一对数的末尾节点 while head: pnext = head.next head.next = dbhead dbhead = head # 每次更新 那一对的头节点 head = pnext if dbhead and dbhead.next or (not pnext): # 如果成对或者 结束了 dbtail.next = dbhead # 连接 上一对 与下一对 dbtail = dbhead.next dbhead = None return res.next

思路2:递归

class Solution: 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

思路3:

class Solution: def swapPairs(self, head: ListNode) -> ListNode: dummy = ListNode(-1) dummy.next = head prev_node = dummy while prev_node.next and prev_node.next.next: first_node = prev_node.next; second_node = prev_node.next.next; prev_node.next = second_node first_node.next = second_node.next second_node.next = first_node prev_node = first_node return dummy.next
最新回复(0)