LeetCode题号:24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4,5] 输出:[2,1,4,3,5]示例 2:
输入:head = [] 输出:[]
解题思路:
直接看注释,总结来说就是两个节点调换之后,(A->B来介绍)一定要保证A->Next = B->Next, B->Next = A,然后递归调换即可,注意递归传入的一定是B->Next(既是下个轮回的开始)
func swapPairs(head *ListNode) *ListNode {
//空直接返回
if head == nil {
return nil
}
//当个节点直接返回
if head.Next == nil {
return head
}
// 保存当前节点、当前节点的前置节点,最终返回的必然是第一次交换的head.Next(即:pre)
curr, pre := head, head.Next
// 当当前节点被交换到前置节点的位置时,当前节点的next应该是前置节点的Next
curr.Next = swapPairs(pre.Next)
// 前后对掉后,前置节点的next应该指向当前节点
pre.Next = curr
return pre
}
往期回顾:
【1】LeetCode-409. 最长回文串(Goland实现)
【2】LeetCode-459. 重复的子字符串(Goland实现)
【3】LeetCode-53. 最大子序和(Goland实现)
❤如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄ 3 ̄)づ
❤如果喜欢大白兔分享的文章,就给大白兔点个关注吧!(๑′ᴗ‵๑)づ╭❤~
❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】
❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复讨论(请勿发表攻击言论)