您现在的位置是:首页 >学无止境 >【数据结构】链表 linked list网站首页学无止境

【数据结构】链表 linked list

村口小张 2024-07-18 00:01:02
简介【数据结构】链表 linked list

一、什么是链表

零散的内存空间存储,由元素和指针组成

二、常用操作

1.原理

access:通过next指针遍历

时间复杂度:O(N)

 search:通过next指针遍历

时间复杂度:O(N)

insert:找个新的内存空间存储新元素,链接回原链表

时间复杂度:O(1)

delete:删除元素,删除指针

时间复杂度:O(1)

2.实现

#创建linkedlist
a=deque()

#添加元素
a.append(1)
a.append(2)
a.append(3)

print(a)
#[1,2,3]

#insert,O(N)
a.insert(2,99)

#access,O(N)
print(a[2])
#99

#update
a[2]=88
print(a)
#[1,2,88,3]

#delete
a.remove(88) #O(N)
del a[2]
print(a)
#[1,2]

#get array size
print(len(a))
#1

#iterate array, O(N)
for i in a:
    print(i) #1
for index, e in enumerate(a):
    print(index,e) #0,1
for i in range(0,len(a)):
    print(i,a[i]) #0,1

#find index
print(a.index(1))
#0

Leetcode练习

1474. 删除链表 M 个节点之后的 N 个节点

给定链表 head 和两个整数 m 和 n. 遍历该链表并按照如下方式删除节点:

  • 开始时以头节点作为当前节点.
  • 保留以当前节点开始的前 m 个节点.
  • 删除接下来的 n 个节点.
  • 重复步骤 2 和 3, 直到到达链表结尾.

在删除了指定结点之后, 返回修改过后的链表的头节点.

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def deleteNodes(self, head, m, n):
        """
        :type head: ListNode
        :type m: int
        :type n: int
        :rtype: ListNode
        """
        if not head: 
            return None
        a = b = head
        c, d = m, n
        while m-1 and a.next:
            a, b = a.next, b.next
            m -=1
        while n and b.next:
            b = b.next
            n-=1
        a.next = self.deleteNodes(b.next, c, d)

        return head

 

总结

读慢写快,适合多写少读操作

其他相关Leetcode习题:203,206

参考:手把手带你刷Leetcode力扣|各个击破数据结构和算法|大厂面试必备技能【已完结

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。