题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

Leetcode原题地址:https://leetcode-cn.com/problems/swap-nodes-in-pairs/

测试用例

  • 示例1

输入:head = [1,2,3,4]
输出:[2,1,4,3]

  • 示例2

输入:head = []
输出:[]

  • 示例3

输入:head = [1]
输出:[1]

代码实现

  • 遍历链表

我们需要两两交换链表的节点,很容易就能想到直接遍历链表然后交换链表的节点即可,思路如下:

  1. 我们需要交换链表head,head=node1->node2->node3->node4
  2. 在交换之前我们需要先保存node1和node2
  3. 然后将temp.next=node2
  4. 改变node2指向的节点,此时node2应该指向node1,而且node1应该指向node3,所以先改变node1的指向的节点,然后再改变node2指向的节点
class ListNode:def __init__(self,val,next=None):if isinstance(val,int):self.val = valself.next = nextelif isinstance(val,list):self.val = val[0]self.next = Nonehead = selffor i in range(1,len(val)):node = ListNode(val[i])head.next = nodehead = head.nextclass Solution:def swapPairs(self, head: ListNode) -> ListNode:#定义哑节点dummy = ListNode(-1)dummy.next = head#定义一个临时节点,用来保存交换的状态temp = dummy#遍历链表#注意第一个节点是哑结点,所以我们从第二个开始遍历while temp.next and temp.next.next:#保存链表相邻的两个节点node1 = temp.nextnode2 = temp.next.next#将后面的节点移到前面来temp.next = node2#更改交换后节点的指向node1.next = node2.nextnode2.next = node1#继续交换后面两个相邻的节点temp = node1return dummy.nexthead = [1,2,3,4]listnode = ListNode(head)solution = Solution()
res = solution.swapPairs(listnode)while res:print(res.val)res = res.next
  • 递归实现
class Solution:def swapPairs(self, head: ListNode) -> ListNode:#如果链表的节点个数小于2,不用交换节点直接返回if not head or not head.next:return head#保存链表的下一个节点new_head = head.next#交换后面的节点head.next = self.swapPairs(new_head.next)#更新节点的指向new_head.next = headreturn new_head

参考:两两交换链表中的节点

Python实现两两交换链表中的节点相关推荐

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

    24. 两两交换链表中的节点 思路:使用一个头节点,然后用cur指针指向头 /*** Definition for singly-linked list.* struct ListNode {* in ...

  2. LeetCode 23合并K个升序链表24两两交换链表中的节点

    维护不易,点赞再看,感谢支持 合并K个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1 ...

  3. 力扣 两两交换链表中的节点

    力扣 两两交换链表中的节点 题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

  4. (补)20200328:两两交换链表中的节点(leetcode24)

    两两交换链表中的节点 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 我们以给的例子1→2→3→4说明,因为只需要两两交换,因此最后得到2→1→4→3. 我们把过程写一下:1→2→3→4 到 ...

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

    24. 两两交换链表中的节点 方法一:迭代,虚拟头结点 class Solution {public ListNode swapPairs(ListNode head) {ListNode dummy ...

  6. Leetcode(24)——两两交换链表中的节点

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

  7. LeetCode 24.两两交换链表中的节点 C语言

    题目 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3- ...

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

    1 题目描述 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 2 题目示例 示例 2: 输入 ...

  9. LeedCode 24:两两交换链表中的节点

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

最新文章

  1. 报错信息为:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource
  2. 【python 3.6】python读取json数据存入MySQL(一)
  3. linux之通过htop操作进程使用总结
  4. 初识JavaScript,感觉整个人都不好了。。。
  5. php 错误提示模板,php 关闭错误提示方法总结与性能分析
  6. 实战Makefile
  7. C# 解析JSON格式数据
  8. 每天一道算法题(10)——数对之差的最大值
  9. bit是python最快的bitcoin库_新的Bitcoinpython节点比以前的Python库快100倍
  10. android使用Itext库生成PDF文件
  11. 有哪些英文论文查重软件值得推荐?
  12. 【转自人人】本科生如何发表论文
  13. 中国象棋人工智能实现
  14. 【快进来,这不是毒鸡汤,只是有毒而已】
  15. 蚂蚁开放平台开发第三方授权登陆(三):Android端
  16. 增量式PID到底是什么?
  17. linux 内存管理---页框回收(十)
  18. 多播数据报的寻址方式(怎么找到目的主机)
  19. 微信小程序获取实时天气
  20. 三维荧光学习记录--在Origin中绘制三维荧光光谱图

热门文章

  1. 一位计算机牛人的心得,谈到计算机和数学,很实用~
  2. 张益唐被曝已证明黎曼猜想相关问题,震动数学界(文末送书)
  3. 21 个令程序员泪流满面的瞬间
  4. 4年亏损超6亿,摩贝化学赴美上市能否输血成功?
  5. php reactphp wss_swoole 使用websocket建立wss连接
  6. [PHP]PHP爬虫 - URP教务
  7. 氨基-八聚乙二醇Amino-PEG8-alcohol,352439-37-3
  8. 婚庆摄影公司网站源码搭建
  9. Uber vs. Lyft
  10. 太合音乐领千千音乐突围:在线音乐铜墙铁壁难闯