首页 > 其他分享 >LeetCode 24. 两两交换链表中的节点

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

时间:2023-05-06 15:13:20浏览次数:43  
标签:24 结点 curr head Next 链表 ListNode LeetCode

题目链接:LeetCode 24. 两两交换链表中的节点
本题不涉及算法,直接模拟就可以了,但是模拟的过程中,最好进行画图演示,不然容易出错。
想要达到两两交换链表中节点的效果,就需要按照以下三个步骤进行。
同时为了将头结点和非头结点统一处理,因此新建一个虚拟头结点,
初始时,cur指向虚拟头结点,然后进行如下三步:

操作之后,链表如下:

按照上面的步骤顺序,一步一步进行模拟即可。
完整代码如下:

func swapPairs(head *ListNode) *ListNode {
    // 本题不涉及算法,直接模拟就可以了,但是模拟的过程中,最好进行画图演示,不然容易出错。

    dumpy:=&ListNode{}  //创建虚拟头结点,方便将头节点和非头结点统一处理。
    dumpy.Next = head
    curr:=dumpy  //初始时,curr指向虚拟头结点

    for curr != nil && curr.Next != nil && curr.Next.Next !=nil{
        one:=curr.Next  //对应图中的1号结点
        curr.Next = curr.Next.Next
        th:=curr.Next.Next  //对应图中的3号结点
        curr.Next.Next = one
        one.Next = th
        curr = curr.Next.Next
    } 
    return dumpy.Next
}

另外本题也可以用递归实现,相对迭代稍微难理解一些。
代码如下:

// 递归三部曲
func swapPairs(head *ListNode) *ListNode {
    //递归的退出条件
   if head == nil || head.Next == nil {
        return head
    }

    next := head.Next  //对应图中的2号结点
    head.Next = swapPairs(next.Next)   //当前头结点的next是递归下一层的返回结果

    //单层递归的逻辑,
    next.Next = head   
    return next   //递归的返回结果
}

标签:24,结点,curr,head,Next,链表,ListNode,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17377379.html

相关文章

  • 合并k个已排序的链表
    描述合并k 个升序的链表并将结果作为一个升序的链表返回其头节点。 数据范围:节点总数 0≤n≤5000,每个节点的val满足∣val∣<=1000要求:时间复杂度 O(nlogn) 示例输入:[{1,2},{1,4,5},{6}]返回值:{1,1,2,4,5,6} 算法思想1、将k个链表两两进行合并(采用顺......
  • 集合、序列、链表进行过滤排序
    C#有Linq对list等数据的排序过滤等操作java有stream()php也有第三方库phpLinq,或array_filter()、array_search()、array_map()等也行。.....------------它们都是,配合一个方法或函数(可以匿名函数和lambda表达式),进行过滤. 相关:  https://www.bilibili.com/video/BV1B5......
  • ubuntu 20 安装k8s 1.24 -3个组件
    搜索  阿里云源  开源镜像网站  找kubernetes  点进去,配置方式apt-getupdate&&apt-getinstall-yapt-transport-httpscurlhttps://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg|apt-keyadd-cat<<EOF>/etc/apt/sources.list.d/kubernetes.lis......
  • LeetCode 周赛 343(2023/04/30)结合「下一个排列」的贪心构造问题
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。大家好,我是小彭。今天是五一假期的第二天,打周赛的人数比前一天的双周赛多了,难道大家都只玩一天吗?这场周赛是LeetCode第343场单周赛,如果不考虑第一题摆烂的翻译,整体题目质量还是很不错哒。往期回顾:L......
  • 24基于java的宠物医院管理系统
    项目背景随着互联网的普及,已经和我们的生活不可分割;宠物渐渐的已经成为了我们的好朋友,宠物医院管理系统可以帮助用户合理的管理宠物,呵护宠物的健康,对宠物起到了一个健康监控的作用;项目介绍系统总体分为3个角色:分别是系统管理员;医生和用户;不能的角色拥有不同的功能权限,下面详......
  • 单链表
    单链表的每个结点,包含值和链接到下一个结点的引用字段。//definitionforsingly-linkedlist.structSinglyListNode{intval;SinglyListNode*next;SinglyListNode(intx):val(x),next(Null){}//用头结点来表示整个列表};与数组不同,我们无法在常量时间内访......
  • LeetCode刷题记录|LeetCode热题100|226.翻转二叉树(easy)
    题目描述:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。 思路与算法:从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点root的左右两棵子树都已经翻转,只需交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。时间复......
  • LeetCode 206. 反转链表
    题目链接:LeetCode206.反转链表本题是链表题目中非常重要的一道题目--反转指针。解题方法有两种:1.双指针法2.递归法首先看双指针法:快指针总是在慢指针的前面,也就是每次将快指针的节点的next指针更新成指向慢指针,这样不就进行了反转嘛。完整代码如下:funcreverseList(hea......
  • [Leetcode] 0705. 设计哈希集合
    705.设计哈希集合EnglishVersion题目描述不使用任何内建的哈希表库设计一个哈希集合(HashSet)。实现MyHashSet类:voidadd(key)向哈希集合中插入值key。boolcontains(key)返回哈希集合中是否存在这个值key。voidremove(key)将给定值key从哈希集合中删除。如果......
  • LeetCode 203. 移除链表元素
    题目链接:LeetCode203.移除链表元素本题是一个经典的单链表删除元素的题目,主要注意的有两点:如果删除的元素是不是头元素,则直接p.Next=p.Next.Next即可如果删除的元素是头元素,则需要进行单独的处理forhead!=nil&&head.Val==val{head=head.Next}ifh......