golang力扣leetcode 24.两两交换链表中的节点

简介: golang力扣leetcode 24.两两交换链表中的节点

24.两两交换链表中的节点

24.两两交换链表中的节点

题解

两种解法,第一种递归第二种迭代,链表题建议画图做


代码

package main
type ListNode struct {
  Val  int
  Next *ListNode
}
func swapPairs1(head *ListNode) *ListNode {
  if head == nil || head.Next == nil {
    return head
  }
  newHead := head.Next
  newHeadNext := newHead.Next
  newHead.Next = head
  head.Next = swapPairs1(newHeadNext)
  return newHead
}
func swapPairs2(head *ListNode) *ListNode {
  dummy := &ListNode{0, head}
  cnt := dummy
  for cnt.Next != nil && cnt.Next.Next != nil {
    node1 := cnt.Next
    node2 := cnt.Next.Next
    cnt.Next = node2
    node1.Next = node2.Next
    node2.Next = node1
    cnt = node1
  }
  return dummy.Next
}


目录
相关文章
|
4月前
|
机器学习/深度学习 算法
24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交
1. **两两交换链表中的节点**:通过引入虚拟头结点,使所有节点都能采用统一的交换逻辑,避免对头结点单独处理。 2. **删除链表的倒数第N个节点**:利用双指针技巧,让快慢指针保持N个节点的距离,当快指针到达末尾时,慢指针正好指向待删除节点的前一个节点。 3. **链表相交**:先计算两链表长度并调整起点,确保从相同距离末尾的位置开始遍历,从而高效找到相交节点或确定无交点。 以上方法均在时间复杂度和空间复杂度上进行了优化,适合用于理解和掌握链表的基本操作及常见算法设计思路。
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
133 0
LeetCode第二十四题(两两交换链表中的节点)
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
24. 两两交换链表中的节点
24. 两两交换链表中的节点
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
存储 SQL 算法
LeetCode 83题:删除排序链表中的重复元素【面试】
LeetCode 83题:删除排序链表中的重复元素【面试】

热门文章

最新文章

推荐镜像

更多