[路飞]_24.两两交换链表中的节点

100 阅读1分钟

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

LeetCode24.两两交换链表中的节点

题目要求

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

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

示例

img

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

声明一个dummy来指向头部,然后用一个p指针指向这个节点(dummy),然后就可以交换指针的后面两个元素的位置了

代码部分
var swapPairs = function(head) {    
    let dummy = new ListNode();    
    dummy.next = head;    
    let p = dummy;   
   // 保证接下来要移动的两个元素是有意义的值,否则就不用再移动了    while (p.next && p.next.next) {         
        let n1 = p.next;        
        let n2 = p.next.next;        
        // 实际上的交换操作        
        p.next = n1.next;        
        n1.next = n2.next;        
        n2.next = n1;        
        // p指针向后移动,移动到即将要变换的两个元素的前面        
        p = n1;    
    }    
    return dummy.next; //最后要返回的是dummy.next 而不是dummy
};