Golang leetcode24两两交换链表中的节点 递归 迭代

两两交换链表中的节点 leetcode24

递归 两个节点一递归

第一次即成功,泪目!!

go 复制代码
// 每两个进行一次交换
func swapPairs(head *ListNode) *ListNode {
	//每两个的第一个节点
	var pre *ListNode
	//递归结束条件,即当剩下的节点不满足两个时
	if head == nil || head.Next == nil {
		return head
	}

	//保留递归的子节点
	cur := head.Next.Next

	//交换本次的顺序
	pre = head.Next
	pre.Next = head

	//1 2 3 4 -> 2 1 4 3
	//第三个节点开始进行递归,且如果交换,指向的应该是交换过后的次序,即本来的第四个
	pre.Next.Next = swapPairs(cur)

	//将交换次序后的返回
	return pre

}

迭代方法,虚拟头节点

go 复制代码
// 使用迭代方法
// 不能操之过急,这里前面迭代完连接的应当还是未交换过的次序
func swapPairs(head *ListNode) *ListNode {

	dummyHead := &ListNode{}
	cur := dummyHead //用来保存当前位置

	//赋予初始值
	cur.Next = head
	
	//结束条件,即后续节点不满足两个
	for cur.Next != nil && cur.Next.Next != nil {

		//要交换的两个节点记为node1和node2;下一次迭代的起始定义为next
		//h* 1 2 3 4
		node1 := cur.Next
		node2 := cur.Next.Next
		next := cur.Next.Next.Next

		//交换步骤
		cur.Next = node2
		node2.Next = node1
		node1.Next = next
		
		//更改下次迭代的开始节点
		cur = node1
	}

	//由于使用虚拟头节点,返回真实的链表
	return dummyHead.Next
}
相关推荐
紧跟先前的步伐4 小时前
Go AI Agent 实战 06|JSON 结构化输出与 Go 后端校验
人工智能·ai·golang
凤凰院凶涛QAQ5 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
H.莓飛5 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构
wangchunyu1146 小时前
JAVA AQS与Lock实现原理(含CAS)
java·开发语言·word
爱喝水的鱼丶6 小时前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
w_zero_one7 小时前
算法--模拟
java·数据结构·算法
小灰灰搞电子7 小时前
Rust+Slint 实现FTP客户端调试助手源码分享
开发语言·后端·rust
外收内放7 小时前
面向对象高级(实战案例)
开发语言·python·学习
薛定e的猫咪8 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
fanruitian8 小时前
python else用法
开发语言·python