zoukankan      html  css  js  c++  java
  • 链表的优缺点以及例题 LeetCode 第 25 题

    链表(LinkedList)

    • 单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。 
    • 双链表:与单链表不同的是,双链表的每个结点中都含有两个引用字段。

    链表的优点如下:

    • 链表能灵活地分配内存空间;
    • 能在 O(1) 时间内删除或者添加元素,前提是该元素的前一个元素已知,当然也取决于是单链表还是双链表,在双链表中,如果已知该元素的后一个元素,同样可以在 O(1) 时间内删除或者添加该元素。

    链表的缺点是:

    • 不像数组能通过下标迅速读取元素,每次都要从链表头开始一个一个读取;
    • 查询第 k 个元素需要 O(k) 时间。

    示例:

    给定这个链表:1->2->3->4->5

    当 k=2 时,应当返回:2->1->4->3->5

    当 k=3 时,应当返回:3->2->1->4->5

    在翻转链表的时候,可以借助三个指针:prev、curr、next,分别代表前一个节点、当前节点和下一个节点,实现过程如下所示。

    class Solution:
        def reverseKGroup(self, head, ListNode, k: int):
            l = 0
            heads = ListNode(0)
            ans = heads
            ls = head
            while (ls != None):
                l = l + 1
                ls = ls.next
            while (head != None):
                if l >= k:
                    pre = head
                    st = head
                    for i in range(k):
                        st = st.next
                    new = ListNode(0)
                    new.next = st
                    for i in range(k):
                        last = head.next
                        head.next = new.next
                        new.next = head
                        head = last
                        ans.next = new.next
                    ans = pre
                    l -= k
                else:
                    ans.next = head
                    break
            return heads.next
  • 相关阅读:
    C#通过文件头判断图像格式(摘录)
    devenv.exe 应用程序错误
    LINQ TO SQL中的selectMany(转)
    DragDrop registration did not succeed. (摘录)
    API各函数作用简介(转)
    Linq递归用法(摘录)
    (转)逐步为对象集合构建一个通用的按指定属性排序的方法
    何止 Linq 的 Distinct 不给力(转)
    关于sql日志文件
    DES算法的C#实现
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/13996932.html
Copyright © 2011-2022 走看看