python学习2-数据结构与算法-链表

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。

链表分类:

1.单向或双向

2.带头和不带头

3.循环或非循环

单链表的定义

class ListNode(object):

def init(self, val=0, next=None):

self.val = val

self.next = next

class NodeList(object):

def init(self):

self.head = Node()

def getLen(self):

if !self.head:

return 0

num = 1

while !cur.next:

num += 1

cur = cur.next

return num

#打印链表

def printList(self):

if !self.head:

print("none")

ans = []

cur = self.head

while !cur:

ans.append(curl.val)

cur = cur.next

return ans

#指定位置后面插入

def insert(self,value,index=-1):

#如果链表为空,插入第一个元素

if !self.head:

self.head = Node(value)

if index!=-1 or index!=0:

return False

return True

#若指定插入位置为第一位

if index == 0:

cur = Node(value)

cur.next = self.head

self.head = cur

return True

#若指定位置为链表尾

elif index == -1:

cur = self.head

while cur.next:

cur = cur.next

cur.next = Node(value)

else:

#index从0开始,到index-1的位置,需要移动index-1次

i = index -1

cur = self.head

while i>0 and !cur.next:

i -= 1

cur = cur.next

if !cur.next and i == 0:

tmp = cur.next

cur.next = Node(value)

cur = cur.next

cur.next = tmp

#插入位置为链表尾

elif i == 0 and !cur.next:

cur.next = Node(value)

else:

return "insert index is too large"

return self.head

#指定位置后面删除

def pop(self,value,index=-1):

if !self.head:

return False

elif !self.head.next:

if self.head.val != value:

return False

else:

self.head = None

return True

else:

cur ,pre = self.head,None

while cur:

if cur.val == value:

if cur == self.head:

self.head = cur.next

else:

pre.next = cur.next

break

else:

pre ,cur = cur,cur.next

return True

Leetcode刷题

反转整个链表(面试高频考点)-- 力扣(LeetCode)206

回文链表(数组反转ans[::-1]). - 力扣(LeetCode)234

环形链表(快慢指针). - 力扣(LeetCode)141、142

链表排序148

合并K个升序链表. - 力扣(LeetCode)23

链表每K个节点翻转. - 力扣(LeetCode)24. - 力扣(LeetCode)25

深拷贝. - 力扣(LeetCode)138

移除链表元素. - 力扣(LeetCode)19

相关推荐
喜欢吃豆14 分钟前
我把 LLM 技术栈做成了一张“可复用的认知地图”:notes-on-llms 开源仓库介绍
学习·语言模型·架构·开源·大模型·多模态
程序员佳佳20 分钟前
2025年大模型终极横评:GPT-5.2、Banana Pro与DeepSeek V3.2实战硬核比拼(附统一接入方案)
服务器·数据库·人工智能·python·gpt·api
刘某的Cloud1 小时前
列表、元组、字典、集合-组合数据类型
linux·开发语言·python
学烹饪的小胡桃1 小时前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
nnsix1 小时前
QFramework学习笔记
笔记·学习
我想我不够好。1 小时前
电工实操 电路的接线和理解以及练习 12.21
学习
ys~~1 小时前
git学习
git·vscode·python·深度学习·学习·nlp·github
知识分享小能手1 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04的桌面环境 (4)
linux·学习·ubuntu
Mqh1807621 小时前
day46 Grad-CAM
python
郝学胜-神的一滴1 小时前
Python魔法函数一览:解锁面向对象编程的奥秘
开发语言·python·程序人生