最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 链表

    正文概述 掘金(五四)   2021-02-01   616

    一、链表:是一种基础数据结构,是一种线性表,不会按线性的顺序存储数据。

    每一个结点存储一个数据和一个指向下一结点的地址(也叫后继指针next) 增、删的时间复杂度为O(1),查的时间复杂度为O(n)

    1、常见链表

    单链表:头结点记录链表基地址,尾结点的指针指向空地址null

    循环链表:头结点记录链表基地址,尾结点的指针指向头结点

    双向链表:每一个结点存储一个数据和一个指向下一结点的地址(也叫后继指针next),还有一个指向上一结点的地址(也叫前驱指针prev)

    2、线性表(Linear List)。

    线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。

    二、leetcode题目

    1、剑指 Offer 24. 反转链表

    定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

    示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL

    var reverseList = function(head) {
        let prev=null
        let curr=head
        while(curr){
            [curr.next,prev,curr]=[prev,curr,curr.next]
        }
        return prev
    };
    

    2、92. 反转链表 II

    反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。

    示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL

    var reverseBetween = function(head, m, n) {
        let prev=null
        let curr=head
        for(let i=1;i<m;i++){
            prev=curr
            curr=curr.next
        }
        let prev2=prev
        let curr2=curr
        for(let i=m;i<=n;i++){
            [curr.next,prev,curr]=[prev,curr,curr.next]
        }
        if(prev2!==null){
            prev2.next=prev
        }else{
            head=prev
        }
        curr2.next=curr
        return head
    };
    

    3、141. 环形链表

    给定一个链表,判断链表中是否有环。

    如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

    如果链表中存在环,则返回 true 。 否则,返回 false 。

    var hasCycle = function(head) {
        if(head==null){
            return false
        }
        let slow=head
        let fast=head
        while(fast.next!=null&&fast.next.next!=null){
            slow=slow.next
            fast=fast.next.next
            if(slow==fast){
                return true
            }
            
        }
        return false
    };
    

    4、剑指 Offer 25. 合并两个排序的链表

    输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

    示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4

    var mergeTwoLists = function(l1, l2) {
        let head=new ListNode(0)
        let curr=head
        while(l1&&l2){
            if(l1.val<=l2.val){
                curr.next=l1
                l1=l1.next
            }else{
                curr.next=l2
                l2=l2.next
            }
        curr=curr.next
        }
    
        curr.next=l1?l1:l2
        return head.next
    };
    

    5、


    起源地下载网 » 链表

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元