Python实现两两交换链表中的节点
题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
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]
代码实现
- 遍历链表
我们需要两两交换链表的节点,很容易就能想到直接遍历链表然后交换链表的节点即可,思路如下:
- 我们需要交换链表head,head=node1->node2->node3->node4
- 在交换之前我们需要先保存node1和node2
- 然后将temp.next=node2
- 改变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实现两两交换链表中的节点相关推荐
- LeetCode-链表-24. 两两交换链表中的节点
24. 两两交换链表中的节点 思路:使用一个头节点,然后用cur指针指向头 /*** Definition for singly-linked list.* struct ListNode {* in ...
- LeetCode 23合并K个升序链表24两两交换链表中的节点
维护不易,点赞再看,感谢支持 合并K个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1 ...
- 力扣 两两交换链表中的节点
力扣 两两交换链表中的节点 题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...
- (补)20200328:两两交换链表中的节点(leetcode24)
两两交换链表中的节点 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 我们以给的例子1→2→3→4说明,因为只需要两两交换,因此最后得到2→1→4→3. 我们把过程写一下:1→2→3→4 到 ...
- 24.两两交换链表中的节点
24. 两两交换链表中的节点 方法一:迭代,虚拟头结点 class Solution {public ListNode swapPairs(ListNode head) {ListNode dummy ...
- Leetcode(24)——两两交换链表中的节点
Leetcode(24)--两两交换链表中的节点 题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: ...
- LeetCode 24.两两交换链表中的节点 C语言
题目 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3- ...
- 链表——24. 两两交换链表中的节点
1 题目描述 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 2 题目示例 示例 2: 输入 ...
- LeedCode 24:两两交换链表中的节点
两两交换链表中的节点 题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 链接: 24. 两两交换链表中的 ...
最新文章
- 报错信息为:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource
- 【python 3.6】python读取json数据存入MySQL(一)
- linux之通过htop操作进程使用总结
- 初识JavaScript,感觉整个人都不好了。。。
- php 错误提示模板,php 关闭错误提示方法总结与性能分析
- 实战Makefile
- C# 解析JSON格式数据
- 每天一道算法题(10)——数对之差的最大值
- bit是python最快的bitcoin库_新的Bitcoinpython节点比以前的Python库快100倍
- android使用Itext库生成PDF文件
- 有哪些英文论文查重软件值得推荐?
- 【转自人人】本科生如何发表论文
- 中国象棋人工智能实现
- 【快进来,这不是毒鸡汤,只是有毒而已】
- 蚂蚁开放平台开发第三方授权登陆(三):Android端
- 增量式PID到底是什么?
- linux 内存管理---页框回收(十)
- 多播数据报的寻址方式(怎么找到目的主机)
- 微信小程序获取实时天气
- 三维荧光学习记录--在Origin中绘制三维荧光光谱图