首页 > 其他分享 >leetcode 24. 两两交换链表中的节点 js实现

leetcode 24. 两两交换链表中的节点 js实现

时间:2022-11-26 02:44:20浏览次数:71  
标签:24 head end js next 链表 prev 节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

提示:

  • 链表中节点的数目在范围 [0, 100] 内
  • 0 <= Node.val <= 100

原题

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
//  迭代法
// 主要修改的几个指针(注意顺序不要变):
// 1.要交换的第一个节点的上一个节点的下一个节点指针,变为第二个
// 2.要交换的第一个节点的下一个节点指针,变为第三个
// 3.要交换的第二个节点的下一个节点指针,变为第一个
var swapPairs = function(head) {
    if(!head || !head.next){
        return head;
    }
    // 创建一个空节点
    let prev = new ListNode(0);
    // 将空节点的下一个指向头结点
    prev.next = head;
    // 复制创建的节点
    let res = prev;
    // while 迭代
    while(prev.next && prev.next.next){
        // 先获取第一个节点
        let start = prev.next;
        // 获取第一个节点的下一个
        let end = prev.next.next
        // 将头节点的下一个节点指向第二个节点
        prev.next = end;
        // 将第一个节点的下一个指向第三个节点
        start.next = end.next;
        // 将第二个节点的下一个指向第一个节点,这里注意顺序,因为上面会用到 end.next,下面又会进行修改,先使用,后修改
        end.next = start;
        // 去到下一个节点迭代
        prev = start;
    }
    // 返回创建的节点的下一个即为最终结果
    return res.next;
};

参考题解

标签:24,head,end,js,next,链表,prev,节点
From: https://www.cnblogs.com/beileixinqing/p/16926811.html

相关文章

  • GL-Talking about health problem 20221124
    TopicTalkingabouthealthproblemshaveyoueveraskedafriendforhealthadvice?Whatdidyousay?Whataresomecommonhealthproblemspeoplehave?Isomet......
  • elasticsearch批量导入json数据
     json 数据集的内容以行作为分割,不要添加除换行以外的空格每两行作为一条文档,第一行的_index指明索引,_id指明该条文档的id;第二行为具体的数据内容; 不管下面哪种方......
  • 算法6:LeetCode_合并两个有序链表
    题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:l1=[1,2,4],l2=[1,3,4]   输出:[1,1,2,3,4,4]......
  • Js AES 中key与字节数组的使用
    CryptoJS库使用GitHub地址:https://github.com/brix/crypto-jsnpm下载:npminstallcrypto-js//字符串转字节数组varwordArray=CryptoJS.enc.Utf8.parse("3de416......
  • nginx socket() failed (24: Too many open files)
    访问量的增大,相应nginx连接数,以及打开的文件数,是需要调整的,不然就会报以下错误2019/10/1016:04:37[alert]364127#0:*11935302socket()failed(24:Toomanyopenfi......
  • 有了 Protocol buffer 还是用 JSON
    Protocolbuffer这东西真的很轻便吗? ​​​​ Protocolbuffer这东西一点都不轻便,定义文件后需要重新编译一次,编译出来的代码没有可读性,没有可调试的可能。版本不兼容Pr......
  • JSP课设:学生选课系统(附源码+调试)
    JSP学生选课管理系统学生选课管理系统功能概述(1)登录模块分为两种角色:学生角色、教师角色(2)教师模块:选课管理功能为对课程信息(课程编号、名称、学分)进行添加、修改、删除操......
  • Golang中一个不错的处理 JSON 的库 go-dproxy
    国庆七天,你是吃多了,还是睡多了?放假七天转眼即逝,接下来的七天可能你又觉得会很漫才。言归正传。Golang虽然自己就带了JSON(encoding/json)处理的库,也有第三方的simplejs......
  • js 路径
    在tomcat中发布,应用程序目录是这样的-webapp|-web-root 目录---login.jsp文件|--ext2     目录----ext-all.js 文件|---adapter 目录|----ext    ......
  • [网络流 24 题] 圆桌问题
    圆桌问题传送门题目大意有一些单位和一些桌子,每个单位都排除了一定量的领导参加会议,从同一个单位来的代表不在同一个桌子上,给出一个满足要求的代表就餐方案。题目分析......