链表的优缺点以及例题 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
复制代码

 

posted on   星河赵  阅读(990)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
历史上的今天:
2017-11-17 HTML5自定义属性之data-index

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示