
🏆本文收录于《LeetCode每日一题》,专门攻坚算法提升,带着你一块儿刷题。
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:


编辑
输入:head = [1,2,3,4]
输出:[2,1,4,3]示例 2:
输入:head = []
输出:[]示例 3:
输入:head = [1]
输出:[1]提示:
[0, 100] 内0 <= Node.val <= 100直接看注释,总结来说就是两个节点调换之后,(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
}执行结果截图:

写链表题,可以多声明几个变量,把节点按顺序用 0 1 2 3 标清楚,在草稿纸上画画,就清楚多了。
一个人刷可能会觉得很累很难坚持,但是一群人刷就会觉得它是一件很有意义的事儿,互相督促互相鼓励,一起变强。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!