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/
    
  • 相关阅读:
    ubuntu 访问 共享 windows文件夹
    ubuntu下android环境的搭建
    smb使用 ------转载自http://blog.csdn.net/tlaff/article/details/5463068
    oracle jar
    悬浮按钮
    移动开发赚钱
    截取scrollview的滑动事件,传递给子控件
    put ListView in a ScrollView(bug fixed)
    35岁前务必成功的12级跳
    mysql分页原理和高效率的mysql分页查询语句
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/13810720.html
Copyright © 2011-2022 走看看