Day 3/100 算法 | Javascript 模拟实现旋转链表

2021年11月25日 阅读数:3
这篇文章主要向大家介绍Day 3/100 算法 | Javascript 模拟实现旋转链表,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

今天是LeetCode算法题
https://leetcode-cn.com/probl...算法

解题前须要了解算法结构:segmentfault

一、链表的结构数组

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */

结构相似下面:ui

{value:val,next:{value:val2,next:null}}this

二、输入的head其实不是数组形式的,而是上面的结构spa

以后按结构模拟链表,其中,思路是造成闭环,再断开;指针

解法还有快慢双指针;code

这个图例还蛮清晰的;leetcode

image.png

image.png

https://leetcode-cn.com/probl...it

仿写的代码以下:

var rotateRight = function(head, k) {

    //ListNode的节点结构为{value:val,next:{value:val2,next:null}}
    if(!head||!head.next||!k){
        return head
    }
    //获取链表长度
    let len=1
    let tmp=head
    while(tmp.next){
        tmp=tmp.next
        len ++
    }
    //造成闭环
    tmp.next=head
    let gap=len-k%len
    //找到切分的节点
    while(gap){
        tmp=tmp.next
        gap --
    }
    let res=tmp.next
    tmp.next=null
    return res

};