zoukankan      html  css  js  c++  java
  • 两两交换链表中的节点

    两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    示例

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

    题解

    /**
     * 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}
     */
    var swapPairs = function(head) {
        var headNode = new ListNode(null, head);
        var pre = headNode;
        var cur = head;
        while(cur && cur.next){
            let curTmp = cur;
            let nextTmp = cur.next;
            curTmp.next = nextTmp.next;
            pre.next = nextTmp;
            nextTmp.next = curTmp;
            pre = curTmp;
            cur = curTmp.next;
        }
        return headNode.next;
    };
    

    思路

    通过迭代的方式实现两两交换链表中的节点,直接遍历整个链表即可,首先定义一个空的头结点,之后定义前置节点与当前正需要处理的节点,当正在处理的节点存在以及当前节点的下一个节点都存在时进行循环,将当前节点与当前节点的下一个节点进行缓存,之后将curNode节点的next赋值为nextNode节点的next,即首先将该节点的下一个节点指向nextNode的下一个节点,之后将preNodenext赋值为nextNode,将nextNodenext赋值为curNode,最后将preNode赋值为curNodecurNode赋值为curNodenext,注意此时的curNode其实已经被交换换成了,是两个节点中的后一个节点,最后等待循环完成后返回头结点的next即可。

    每日一题

    https://github.com/WindrunnerMax/EveryDay
    

    参考

    https://leetcode-cn.com/problems/swap-nodes-in-pairs/
    
  • 相关阅读:
    ng-class中的if else判断
    Sass 的使用
    pre 标签的使用
    C++操作 SQL数据库 实例 代码步骤
    自己写的一个操作Mysql的简单的实例
    C++ 链接Mysql 函数介绍
    Mysql 操作命令 详解
    MFC程序开始的执行过程详述
    Java各种日期格式的获取和设置指定日期
    DM8168 OpenCV尝试与评估(编译ARM版OpenCV)
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/13810720.html
Copyright © 2011-2022 走看看