一、什么是链表
零散的内存空间存储,由元素和指针组成
二、常用操作
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力扣|各个击破数据结构和算法|大厂面试必备技能【已完结