12 JavaScript牛客网JZ22 JZ24

JZ22 链表中倒数最后k个结点

描述

输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。

如果该链表长度小于k,请返回一个长度为 0 的链表。

要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)

进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)

示例

输入:{1,2,3,4,5},2

返回值:{4,5}

说明:返回倒数第2个节点4,系统会打印后面所有的节点来比较。

/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pHead ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
function FindKthToTail( pHead ,  k ) {
    // write code here
    let n = 0
    let beginTemp = pHead
    while(beginTemp){
        n++
        beginTemp = beginTemp.next
    }
    if(n<k){
        return 0
    }else{
        for(let i = 0;i<n-k;i++){
            pHead = pHead.next
        }
        return pHead
    }
}
module.exports = {
    FindKthToTail : FindKthToTail
};

JZ24 反转链表

描述

        给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

        要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。

        如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

示例

输入:{1,2,3}

返回值:{3,2,1}

思路

        由于是单向链表,所以没有节点的上一个;

        反转链表首先是将当前指针cur的next指向的cur的前一个;

        由于没有前一个指针,所以定义一个pre => cur.next = pre;

        那么此时cur.next就变成的pre,而初始的cur.next没有保存,已经丢失;

        所以在改变cur.next之前,要将cur.next存好 => curNext = cur.next;

        此时cur的后一个和前一个节点都已经存好了;

        那么就将pre = cur ; cur = curNext,将pre和cur两个指针向后移动。        

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function ReverseList(pHead)
{
    // write code here
    let pre = null
    let cur = pHead
    let n=0
    while(cur){
        n++
        let curNext = cur.next
        cur.next = pre
        pre = cur
        cur = curNext
    }
    if(n<=0){
        return null
    }else{
        return pre
    }
}
module.exports = {
    ReverseList : ReverseList
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值