LeetCode1721. 交换链表中的节点

给你链表的头节点 head 和一个整数 k 。

交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。

 

 

定义两个指针fast和slow,fast先往前走k个节点,记录下这个即将被交换的节点,然后slow开始走,当fast走到末尾的时候,slow正好走到倒数第k个节点,然后与前面的第k个节点交换,return head;

var swapNodes = function(head, k) {
    if(head.next === null) return head;
    let temp = new ListNode(0,null);
    temp.next = head;
    let fast = slow = temp;
    let nodek;
    let i = 0;
    while(slow) {
        if(i===k){
            nodek = fast;
            
        }
        if(fast) fast = fast.next;
        
        if(i>=k) {
            //console.log(fast,slow)
            slow = slow.next;
            if(fast === null ) {
                let t = slow.val;
                slow.val = nodek.val;
                nodek.val = t;
                break;
            }
            
        }
        i++;
    }
    return head;
};

 

posted @ 2021-03-20 17:04  JMH0113  阅读(51)  评论(0)    收藏  举报