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/
    
  • 相关阅读:
    012——matlab判断变量是否存在
    011——MATLAB清除工作控件变量
    014——C#新建文件夹
    征服django的关键内容
    Django中session的使用
    RabbitMq与Redis的使用
    python的命名规则
    python类的深层次理解
    python类总结
    python之paramiko模块
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/13810720.html
Copyright © 2011-2022 走看看