网站建设云服务器,网站和网页的区别是什么,网站建设施工方案,小广告推广网站两两交换链表中的节点
题目#xff1a;24. 两两交换链表中的节点
给你一个链表#xff0c;两两交换其中相邻的节点#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题#xff08;即#xff0c;只能进行节点交换#xff09;。
示例 124. 两两交换链表中的节点
给你一个链表两两交换其中相邻的节点并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题即只能进行节点交换。
示例 1 输入head [1,2,3,4]
输出[2,1,4,3]示例 2
输入head []
输出[]示例 3
输入head [1]
输出[1]提示
链表中节点的数目在范围 [0, 100] 内0 Node.val 100
方法一
这是一个模拟题模拟交换的过程就行了从链表尾执行每次返回执行后的头节点每次执行时将反转后节点的后继连接返回的头结点。
func swapPairs(head *ListNode) *ListNode {if head nil || head.Next nil {return head}pre : headcur : pre.Nexttail : swapPairs(cur.Next)pre.Next tailcur.Next prereturn cur
}递归会使用额外的栈一般不推荐使用。 方法二
也可以不使用递归要记住递归代码转换成非递归代码不一定需要使用栈但是使用栈一定能将递归代码转化为非递归代码。具体思路参考代码随想录 (programmercarl.com)
func swapPairs(head *ListNode) *ListNode {// 头指针hp : ListNode{Next: head,}pre : hp// 模拟指针每次交换两个节点位置的指针变化for head ! nil head.Next ! nil {pre.Next head.Nextnext : head.Next.Nexthead.Next.Next headhead.Next nextpre headhead next}return hp.Next
}