当前位置:   article > 正文

【LeetCode刷题】24. 两两交换链表中的节点_给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改

1:题目描述(力扣

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

2:解题思路

因为不能改变修改节点内部的值,只能将节点进行交换,所以我们使用虚拟头节点

第一步:定义一个虚拟头节点,指向链表的头节点;创建一个临时指针pre,指向虚拟头节点。

第二步:只有当pre.next,pre.next.next不为空,才能进行交换,否则就是已经交换完成或者不满足交换的条件。

  • 定义一个临时指针cur指向pre.next,定义一个临时指针post指向pre.next.next

  • 下面进行交换节点:

        将cur的下一个节点指向post的下一个节点

        post的下一个节点指向cur

        pre的下一个节点指向post

  • 将临时指针移动到pre.next.next

第三步:返回链表头节点

代码展示:

  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. # def __init__(self, val=0, next=None):
  4. # self.val = val
  5. # self.next = next
  6. class Solution:
  7. def swapPairs(self, head):
  8. res = ListNode(next=head) # 创建一个虚拟头节点
  9. pre = res # 定义一个临时指针,指向虚拟头节点
  10. while pre.next and pre.next.next:
  11. cur = pre.next
  12. post = pre.next.next
  13. cur.next = post.next # 将cur的下一个节点指向post的下一个节点
  14. post.next = cur # 将post的下一个节点指向cur
  15. pre.next = post # 将pre的下一个节点指向post
  16. pre = pre.next.next # 将pre指向pre的下一个节点的下一个节点
  17. return res.next # 返回链表的头节点
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码吟游诗人/article/detail/61233
推荐阅读
相关标签
  

闽ICP备14008679号